Java 而循环不';我不能正常工作
对象应该根据经过的时间(在追逐或散射之间切换)更改模式(移动算法)。我创建了一个while循环,但对象仅在一种模式(chase)下移动,这很奇怪,因为我最初将其设置为“散射”Java 而循环不';我不能正常工作,java,while-loop,Java,While Loop,对象应该根据经过的时间(在追逐或散射之间切换)更改模式(移动算法)。我创建了一个while循环,但对象仅在一种模式(chase)下移动,这很奇怪,因为我最初将其设置为“散射” private static int seconds=0; private static boolean ghostalive; protected static final int chaseMode = 0; protected static final int scatterMode = 1; protected
private static int seconds=0;
private static boolean ghostalive;
protected static final int chaseMode = 0;
protected static final int scatterMode = 1;
protected static final int frightenedMode = 2;
static int mode; //initially ghost start in scatterMode
public Ghost(int x, int y, Maze maze){
super(x, y, maze);
futureDirection = 0;
timer = 0;
mode = getMode();
}
public static int getMode(){
mode=setMode();
return mode;
}
//LEVEL 1
//scatter for 7s
//chase for 20s
//scatter for 7s
//chase for 20s
//scatter for 5s
//chase for 20s
//scatter for 5s
//chase indefinite
public static int setMode(){
while(ghostalive){
mode = scatterMode;
if(seconds>7)
mode = chaseMode;//chaseMode=true;
if(seconds>27)
mode = scatterMode;
if(seconds>34)
mode = chaseMode;
if(seconds>54)
mode = scatterMode;
if(seconds>59)
mode = chaseMode;
if(seconds>79)
mode = scatterMode;
if(seconds>84)
mode = chaseMode;
seconds++;
}
return mode;
}
您的注释说它在
scatterMode
中启动,但在声明时您没有将模式设置为任何形式。因此,它实际上默认为chaseMode
。因为您没有初始化布尔值ghostAlive
,所以它默认为false,这意味着您的循环永远不会发生,这意味着该模式没有设置为scatterMode
,这意味着它始终保持在chaseMode
要开始修复此问题,应将ghostAlive
初始化为true。然后,对于所有ifs,您可以使用ghostAlive=false
语句结束循环。在整个项目的背景下,我不太确定您使用这种方法的目的是什么,但这一点知识应该可以帮助您解决任何问题。你必须在循环中设置ghostAlive
false才能跳出循环
不过,我不知道为什么要使用这些静态方法和字段。对于你发布的内容来说似乎没有必要
此外,最好将if语句,甚至是单语句,放在花括号中。如果您以后必须添加一些错误,这将有助于抑制任何错误(看起来您必须在此处添加)。
ghostAlive
从未初始化。如果是,这个while
循环将是无限的,因为它永远不会更新。