簡體   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