虽然循环不能正常工作

时间:2012-11-15 04:22:00

标签: java while-loop

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

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;
}

1 个答案:

答案 0 :(得分:1)

您的评论说它从scatterMode开始,但是在声明模式时您不会将模式设置为任何内容。因此,它实际上默认为chaseMode。因为你没有初始化布尔值ghostAlive,所以它默认为false,这意味着你的循环永远不会发生,这意味着模式不会被设置为scatterMode,这意味着它始终保持在{{1} }}

要开始解决此问题,您应该将chaseMode初始化为true。然后,对于所有ifs,您可以放置​​ghostAlive语句来结束循环。在整个项目的背景下,我不确定你的目标是什么,但这一点知识应该可以帮助你。你必须以某种方式在循环中使ghostAlive = false为假,以摆脱循环。

不确定为什么要使用所有这些静态方法和字段。对于您发布的内容似乎没有必要。

此外,将if语句(甚至是单语句)放在大括号中是一种好习惯。如果您以后必须添加一些错误,这将有助于遏制任何错误(因为看起来您将不得不在这里)。