| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3504 人关注过本帖
标题:if else 命令 无法有效执行 找不到原因 请指教
只看楼主 加入收藏
Beta01
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-2-12
结帖率:0
收藏
已结贴  问题点数:10 回复次数:5 
if else 命令 无法有效执行 找不到原因 请指教
请问下面程序中的if else 为什么没有执行呢
程序代码:
import stanford.karel.*;
public class StoneMasonKarel extends SuperKarel {
  public void run() {
      turnLeft();
      turnrightAnd4Steps();
      putdownAndMove();
      moveOnly();
  }

  /*Turn right and move 4 steps while the front is blocked*/
  private void turnrightAnd4Steps() {
      if (frontIsBlocked()) {
          turnRight();
          for (int i=0; i<4; i++){
              move();
          }
          turnRight();
      } else {
          putdownAndMove();
          moveOnly();
      }
  }

      /*Put beeper and move while there is no beeper*/
      private void putdownAndMove() {
          while (noBeepersPresent()) {
              putBeeper();
              move();
          }
      }
    
      /*Just move while there is a beeper*/
      private void moveOnly() {
          while (beepersPresent()) {
              move();
          }
      }
     
}

类似这样的情况在设计其他情景时也出现 if else 没有执行, 是否有可能是软件中没有能执行这个命令的功能? 初学菜鸟请教各位大师

[此贴子已经被作者于2016-2-12 22:37编辑过]

2016-02-12 22:31
Beta01
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-2-12
收藏
得分:0 
补充:
昨天的设计中主要问题是Karel没有执行"如果前面有障碍则右转"的命令.
后来又做了新的思考和尝试,虽然现在还是没有解决"Karel老是撞墙,不肯转向"的问题,但是权当菜鸟自学摸索思考过程记录一下:
1,是否是子级设计中并联的模式导致出现了某些命令优先执行,比如"移动"优先于"转向".
    尝试1:修改子级的三个"private void"为串联模式,但是系统提示错误,每个"private void"只能单独设计说明单个项目,也就是"private void"里不能再包含另一个下级"private void".也就是说每个"private void"都是独立的,但是"private void"里还是可以包含执行另外一个"private void"的项目.只是很遗憾,通过设计一个执行转命令的"private void"包含另一个执行移动命令的"private void"[设想是希望这样能形成命令等级,使转向命令优先于移动命令],还是没有能使Karel转向.
    尝试2:缩短"private void"里的项目命名取得优先权,也不行
    尝试3:修改了设计用while命令设计,Karel还是继续撞墙.
     难道在Karel的Java世界中"移动"优先于"转向"吗?

 
2016-02-13 14:47
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:5 
首先函数得执行,其次判断条件要写对,那些函数定义在哪

一片落叶掉进了回忆的流年。
2016-02-13 23:17
若阳
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2016-2-14
收藏
得分:5 
回复 楼主 Beta01
那是因为turnleft方法中有错,所以下个方法就没有走
2016-02-14 10:29
Beta01
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-2-12
收藏
得分:0 
回复 3楼 诸葛欧阳
    这是我下载斯坦福CS106课程自学的, 其中的Karel Java也是斯坦福的一个程序运行环境. 就目前我自学到的课程里好像没有提到您说的"函数".好像后面"hello world"的课程里才有提及.
    但是这个题目是前面课程的题目,只有while, for, if else, 和turnLeft, frontIsClear, frontIsBlocked 等等Karel被设定能识别运行的. 之前设计过最简单的(完全不用while, for, if else)在单一指定空间里是能运行的. 这是否意味着Super Karel里本来就设定好其他函数部分了,只是让初学者了解写程序的一个大概结构和一种分级思维?
    在斯坦福的Karel Java里,单一的空间里设计一个可以运行的程序很容易, 但是想将程序修改成也能在其他扩展修改的空间,就有点困难.上面的程序就是希望能使Karel能在类似的任意空间里运行.按照课程设置,这个题目应该是可以用前面给的这些简单指令设计出来的.所以我想估计是我没有写好.[有点像play games, 我有点和Super Karel较真了]
2016-02-14 13:51
Beta01
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-2-12
收藏
得分:0 
回复 4楼 若阳
public void run() {
      turnLeft();
      turnrightAnd4Steps();
      putdownAndMove();
      moveOnly();
  }

一,上面这个母结构里,turnLeft();后putdownAndMove();和moveOnly();是正常运行的.  就是turnrightAnd4Steps();没有执行,所以Karel撞墙了.
在母结构里,我还特意把这个命令放在其他两个[putdownAndMove();和moveOnly();]的前面,就是希望能优先转向的.不过没有起作用呢.
另外我也在turnrightAnd4Steps的子结构说明中把其他两个移动的子说明包含在里面,希望能优先转向,也没有用.
二,如果母结构修改为:
public void run() {
      turnLeft();
      turnrightAnd4Steps();
 }
虽然在turnrightAnd4Steps的子结构说明中把其他两个移动的子说明[putdownAndMove();和moveOnly();]包含在里面, 但实际左转后就不动了.
小结:问题应该出现在turnrightAnd4Steps的子结构里,因为母结构会直接忽略这个部分去运行其他部分.
      

2016-02-14 14:03
快速回复:if else 命令 无法有效执行 找不到原因 请指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020533 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved