Java 而循环不';我不能正常工作

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

对象应该根据经过的时间(在追逐或散射之间切换)更改模式(移动算法)。我创建了一个while循环,但对象仅在一种模式(chase)下移动,这很奇怪,因为我最初将其设置为“散射”

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
循环将是无限的,因为它永远不会更新。