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