2014-02-26 26 views
0

標題可能不是很豐富。但這是交易。如何在不繞過另一個的情況下執行一段代碼? Java

我想要用戶執行代碼,如果這是他第二次通過那裏。我做了什麼,正在做一個if語句,但現在我已經注意到了,其餘的都沒有被執行。

Scanner input = new Scanner(System.in); 
Random dice = new Random(); 
int counter = 1; 
boolean playing = true; 
boolean firstTimmer = true; 
boolean got = true; 

System.out.println("Welcome to numberMind! From 0 to x, you'll try to guess the random number!"); 
System.out.println("To quit, guess \"-1\"."); 
System.out.print("Insert x: "); 
int x = 1+input.nextInt(); 
int objective = dice.nextInt(x); 
System.out.print("Ok, I'm ready! What's your first guess? "); 
int guess = input.nextInt(); 


while (playing){ 
    if (guess == -1){ 
     playing = false; 
     break; 
    }else if (!firstTimmer){ 
     got = true; 
     System.out.print("Do you want to change the number range? Yes(1) No(2)"); 
     guess = input.nextInt(); 
     if (guess == 1){ 
      System.out.print("Insert the new x: "); 
      x = 1+input.nextInt(); 
     }else if(guess == 2){ 
      System.out.println("Let's go then!"); 
     }else{ 
      System.out.print("I didn't ask for that number did I? x won't change."); 
     } 
    }else{ 
     while(got){ 
      if (objective == guess){ 
       firstTimmer = false; 
       System.out.println("You guessed it in "+counter+" times!"); 
       counter = 1; 
       System.out.print("Do you want to paly again? Yes(1) No(2) "); 
       guess = input.nextInt(); 
       if (guess == 1){ 
        System.out.println("Great! Here we go..."); 
        got = false; 
        break; 
       }else if (guess == 2){ 
        System.out.print("Thanks for playing!"); 
        got = false; 
        playing = false; 
       }else{ 
        System.out.println("We didn't ask for that. NOW YOU PLAY SOME MORE!"); 
        got = false; 
        break; 
       } 
       break; 
      }else if (guess == -1){ 
       System.out.println("You quited :("); 
       break; 
      }else if (guess == -2){ 
       System.out.println("The correct answer is "+ objective); 
      }else if (counter >= 5 && (counter -5) % 3 == 0){ 
       if (objective % 2 == 0){ 
        System.out.println("The number is pair."); 
       }else{ 
      System.out.println("The number is odd."); 
       } 
      } 
      System.out.println("You have tryed " + counter++ + " times."); 
      System.out.print("What's your guess? "); 
      guess = input.nextInt(); 
     } 
    } 
} 

我想運行的代碼是在最後一個else之後。我沒有看到任何解決辦法。謝謝

回答

2

好吧先從else什麼時候開始問自己:guess != -1firstTimmer == true。你永遠不會設置firstTimmer,它需要設置爲true才能通過else塊。您還需要刪除else if中的break,否則在下一次迭代中永遠不會到達else。

另外,在if語句中同時使用playing = falsebreak是多餘的。兩者都將單獨做同樣的事情。

while (playing){ 
    if (guess == -1){ 
     playing = false; 
     break; 
    }else if (!firstTimmer){ 
     got = true; 
     System.out.print("Do you want to change the number range? Yes(1) No(2)"); 
     guess = input.nextInt(); 
     if (guess == 1){ 
      System.out.print("Insert the new x: "); 
      x = 1+input.nextInt(); 
     }else if(guess == 2){ 
      System.out.println("Let's go then!"); 
     }else{ 
      System.out.print("I didn't ask for that number, x won't change."); 
     } 
     firstTimmer = true; 
     //break; 
    }else{ 
+0

確實!通過改變布爾值我可以使用代碼。解決了它,真的沒有想到這一點。 – EnderEgg

+1

如果您的問題已解決,請點擊我答案旁邊的複選標記並將其標記爲已解決。這將確保它在未來的搜索中不會顯示爲未答覆的問題。如果你願意,你也可以投我的答案。 – NobleUplift

+1

以爲我已經標記過了。並投票決定!再次感謝 – EnderEgg

1
int counter = 0; 
while(playing) { 
    counter++;  //First iteration: was zero, now 1 
    if(counter == 2) { 
     //Do some special thing 
    } 
} 
1

(一)對這種事情的標準模式是:

boolean firstTime = true; 
boolean playing = true; 
int guess = 0; 
while (playing) { 
    if (guess == -1) { 
     playing = false; 
     // NOTE: break is redundant with playing flag, here 
    } else if (!firstTime) { 
     got = true; 
     System.out.print("Do you want to change the number range? Yes(1) No(2)"); 
     guess = input.nextInt(); 
     if (guess == 1) { 
      System.out.print("Insert the new x: "); 
      x = 1+input.nextInt(); 
     } else if(guess == 2) { 
      System.out.println("Let's go then!"); 
     } else { 
      System.out.print("I didn't ask for that number, x won't change."); 
     } 
     firstTime = false; 
    } else { 
     //... do other work here. 
    } 
} 

此外,通過aliteralmind提到的模式是上述的更靈活的版本,讓您呈現循環中的每次「訪問」都有不同的選項。如果需要,我可以用一個完整的例子來進一步描述。

+0

是的,我知道如何使用該櫃檯。謝謝你的時間 – EnderEgg

1

您應該嘗試在代碼中每次解決一個問題。

現在你有很多複雜的代碼難以閱讀和使用。

您的問題的答案,關於第一次訪問。只需在循環之前移動它,然後在必要時啓動循環。

嘗試在子程序(方法)中分解問題並通過一次解決問題。

displayWelcomeScreen(); 
preapreGameContext(); 

do { 
if(doUserWantToChange()) { 
    changeTheGameContext(); 
} 
int gues = askForGues(); 

hasUserGuesCorrectly(); 

} while(isTheGameOn()); 

最終的代碼應該看起來更像上面的例子。

相關問題