[英]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.