2015-08-27 52 views
-2

backEnd類中的for循環 - CompareGuess方法不起作用。 ................................................. .................................................. .................................................For back在backEnd類中不能正常工作?

public class frontEnd 
{ 
    public static void main (String args[]) 
    { 
    int GetGuess = 0; 
    backEnd e1 = new backEnd(); 
    e1.InitializeArray(); 
    while(e1.chanceCounter<3) 
    { 
     System.out.println("Enter a number"); 
     GetGuess = (int)(Math.random()*6); 
     System.out.println(GetGuess); 
     e1.UserGuess(GetGuess); 
     e1.CompareGuess(); 
     if(e1.suc!=1) 
     { 
     System.out.println("It is a miss");  
     } 
    } 

    System.out.println("Sorry, no chances left");   

    } 
}  


class backEnd 
{ 
    int Guess; 
    int HitCounter=0; 
    int[] abc = new int[7] ; 
    int chanceCounter=0; 
    int suc = 0; 
    int x =0; 
    public void InitializeArray() 
    { 
    abc[1]= 3; 
    abc[2] = 5; 
    abc[4] = 1; 
    } 

    public void UserGuess(int guess) 
    { 
    Guess = guess; 
    } 

    public void CompareGuess() 
    { 
    for(x=0; x<=6; x++) 
    { 
     if (abc[x] == Guess) 
     { 
     System.out.println("It is a hit"); 
     chanceCounter = chanceCounter + 1; 
     suc = 1; 
     } 
     break; 
    } 
    } 
} 
+2

你是什麼意思,它不工作?它應該做什麼,它在做什麼? – Zarwan

+4

「不工作」不提供*近*足夠的信息。會發生什麼,你期望會發生什麼?你目前執行了哪些診斷步驟? (另外,我強烈建議您花時間遵循常規的Java命名約定,並設置示例代碼的格式......) –

+5

我在if語句之外看到了一個'break'。將它移動到'}'中,否則你的'for'循環只執行一次。 –

回答

0

的問題似乎是在這裏:

for(x=0; x<=6; x++) 
{ 
    if (abc[x] == Guess) 
    { 
    System.out.println("It is a hit"); 
    chanceCounter = chanceCounter + 1; 
    suc = 1; 
    } 

    break; //Here 
} 

看看你的代碼做什麼:

  • for循環,使第一次迭代,以x = 0

  • 如果abc[x]它等於Guess那麼你的程序執行if語句中的代碼。之後,break語句將被執行。

  • 如果不是,它只是執行break聲明

因此,在這兩種情況下,break聲明它會在第一次迭代要執行(因此,你的程序將走出for的循環)。

看看你的程序只執行你的第一次迭代,而不是其他(x = 1, x = 2 [....] x =6)

如果你想讓你的for循環遍歷所有迭代,你必須從你的代碼中刪除你的break語句。

我期待它對您有所幫助!

+0

謝謝.................. – Priyank

+0

不客氣;)請考慮將其標記爲可接受的答案,如果它有助於解決您的問題。謝謝! –

0

由於您的遊戲全都是關於猜測的。我猜測它應該做什麼,然後我重寫了你的代碼,因爲我不能忍受它保持原樣。我離開它類似於你的,因爲我可以應付:

public class FrontEnd 
{ 
    public static void main (String args[]) 
    { 
    int getGuess = 0; 
    BackEnd e1 = new BackEnd(); 
    e1.initializeArray(); 
    int totalChances = 3; 

    while(e1.chanceCounter < totalChances) 
    { 
     System.out.println("Enter a number"); 
     getGuess = (int)(Math.random()*6); 
     System.out.println(getGuess); 
     e1.userGuess(getGuess); 
     e1.compareGuess(); 
     if(!e1.suc) 
     { 
     System.out.println("It is a miss");  
     } 
     e1.suc = false; 
     e1.chanceCounter++; 
    } 

    System.out.println("Sorry, no chances left"); 
    System.out.println("you scored " + e1.hitCounter + " out of " + totalChances);   

    } 
}  


class BackEnd 
{ 
    int guess; 
    int hitCounter = 0; 
    int[] abc = new int[7] ; 
    int chanceCounter = 0; 
    boolean suc = false; 

    public void initializeArray() 
    { 
    abc[1] = 3; 
    abc[2] = 5; 
    abc[4] = 1; 
    } 

    public void userGuess(int guess) 
    { 
    this.guess = guess; 
    } 

    public void compareGuess() 
    { 
    for(int x = 0; x <= 6; x++) 
    { 
     if (abc[x] == guess) 
     { 
     System.out.println("It is a hit"); 
     hitCounter++; 
     suc = true; 
     break; 
     } 
    } 
    } 
} 

正如其他人所說的break說法應該是有條件的區塊內。此外,您似乎忘記在每次猜測後重置變量suc。你也沒有使用hitCounter。我認爲這是爲了計算正確的猜測,這讓我想知道什麼時候更新chanceCounter:要麼在每次猜測後,要麼在每次猜錯後。我不知道在3次猜測之後,猜測者是否應該沒有機會,或者3次錯誤的猜測之後。我和前者一起去了,每次猜測後更新chanceCounter

0的猜測被認爲是正確的,因爲它們與未初始化的abc數組中的所有條目匹配。

+0

非常感謝,會做必要的修改。 – Priyank

+0

不客氣。如果它以您想要的方式工作,請將我的答案標記爲已接受。這是感謝我的最好方式。 –