繁体   English   中英

While循环无法正常工作

[英]While loop doesn't work properly

假定对象根据经过的时间(在追逐或分散之间切换)更改模式(运动算法)。 我创建了一个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;
}

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

要解决此问题,您应该将ghostAlive初始化为true。 然后,对于所有ifs,您都可以放入ghostAlive = false语句以结束循环。 我不确定在整个项目的背景下使用此方法的目标是什么,但是那一点知识应该可以帮助您解决问题。 您必须以某种方式使ghostAlive false才能退出循环。

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

此外,将if语句(甚至是单条语句)放在大括号中也是一种好习惯。 如果您以后必须添加一些错误,这将有助于遏制所有错误(因为您似乎必须在此处添加)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM