2016-11-17 17 views
0

所以最近我張貼的問題問我的更高的遊戲時,它是所有的地方,只是不工作,我已經採取了另一種方法在這個遊戲中,它的工作,只是一個小問題,這一次,它更容易表現出比解釋那麼,這裏是我的代碼:修復我的循環,並需要對輸入輔助檢查,爪哇

String noReplay = "\nThank you for playing."; 
     String highLow = "(H)igher or (L)ower: "; 
     String loseHigh = "Card is higher, you lose. Would you like to play again? Y/N: "; 
     String loseLow = "Card is lower, you lose. Would you like to play again? Y/N: "; 

     String playAgain; 

     boolean replay = false; 

     Random rand = new Random(); 
     Scanner scan = new Scanner(System.in); 

     do { 

      int card1 = rand.nextInt(13) + 1; 
      int card2 = rand.nextInt(13) + 1; 

      System.out.println("Card is: " + card1); 
      System.out.printf(highLow); 
      String guess = scan.nextLine().toUpperCase(); 

      if(card2 > card1 && guess.equalsIgnoreCase("H")) { 
       System.out.println("Card is: " + card2); 
       System.out.printf(highLow); 
       replay = true; 
       guess = scan.nextLine().toUpperCase(); 

      } 
      else if(card2 > card1 && guess.equalsIgnoreCase("L")) { 
       System.out.println("Card is: " + card2); 
       System.out.printf(loseHigh); 
       playAgain = scan.nextLine().toUpperCase(); 
       if(playAgain.equalsIgnoreCase("Y")) { 
        replay = true; 
       } 
       else if(playAgain.equalsIgnoreCase("N")) { 
        replay = false; 
        System.out.println(noReplay); 
       } 
      } 
      else if(card2 < card1 && guess.equalsIgnoreCase("H")) { 
       System.out.println("Card is: " + card2); 
       System.out.printf(loseLow); 
       playAgain = scan.nextLine().toUpperCase(); 
       if(playAgain.equalsIgnoreCase("Y")) { 
        replay = true; 
       } 
       if(playAgain.equalsIgnoreCase("N")) { 
        replay = false; 
        System.out.println(noReplay); 
       } 
      } 
      else if(card2 < card1 && guess.equalsIgnoreCase("L")) { 
       System.out.println("Card is: " + card2); 
       System.out.printf(highLow); 
       replay = true; 
       guess = scan.nextLine().toUpperCase(); 
      } 

     } while(replay != false); 

這裏我的項目的目的是創建一個簡單的遊戲,當用戶爲了輸入上面或下面的卡號,程序將以正確的答案作出迴應,或者從該階段重放遊戲,或者詢問用戶是否因失敗而想再次玩。

這工作得很好,但是從我的輸出:

Card is: 9 
(H)igher or (L)ower: h 
Card is: 11 
(H)igher or (L)ower: l 
*Card is: 6* 
*(H)igher or (L)ower: l* 
*Card is: 7* 
Card is higher, you lose. Would you like to play again? Y/N: y 
*Card is: 13* 
*(H)igher or (L)ower: h* 
*Card is: 10* 
(H)igher or (L)ower: 

我們可以在標有星號線看到,它不是做它應該做的。 當我說更高,如果數字較低,它應該問我是否想再玩一次,因爲我錯了。在這種情況下,它不?

所以這是我的問題^

另一件事,而在它的IM,我想請與輸入檢查器的幫助,我只希望用戶能夠輸入Y,N,H,L (我已經排除了大寫或小寫問題)。

謝謝您的閱讀!

+0

您應該詢問一次do/while的每次迭代的用戶輸入,並根據遊戲的當前狀態和當前卡做些事情。你正在做/做很多事情,而這又增加了許多你不需要的複雜性。 –

+0

我將如何去? @RAZ_Muh_Taz – SeanHub

回答

1

這應該是有意義的,並有助於減少遊戲的複雜性。看看我對比card1與card2的比較,你希望你的猜測基於card2與card1比較,而不是相反。如果這是有道理的。希望這可以幫助!

 String highLow = "(H)igher or (L)ower: "; 
    String loseHigh = "Card is higher, you lose."; 
    String loseLow = "Card is lower, you lose."; 
    String loseMessageDetails = ""; 
    boolean gameLost = false; 
    boolean askAgain = true; 
    Scanner scan = new Scanner(System.in); 
    String guess = ""; 
    Random rand = new Random(); 

    int card1; 
    int card2; 

    while(askAgain) 
    { 
     if(gameLost) 
     { 
      System.out.println(loseMessageDetails + "\nWould you like to play again? Y/N"); 
      guess = ""; 
      while(!guess.equals("Y") && !guess.equals("N")) 
      { 
       guess = scan.nextLine().toUpperCase(); 
      } 

      if(guess.equals("Y")) 
      { 
       gameLost = false; 
       askAgain = true; 
      } 
      else 
      { 
       askAgain = false; 
      } 
     } 

     if(!gameLost) 
     { 
      card1 = rand.nextInt(13) + 1; 
      card2 = rand.nextInt(13) + 1; 
      System.out.println("Card is: " + card1); 
      guess = ""; 
      //loop until correct type of input 
      while(!guess.equals("H") && !guess.equals("L")) 
      { 
       System.out.printf(highLow); 
       guess = scan.nextLine().toUpperCase(); 
      } 
      //now we either correctly guessed or incorrectly guessed 
      //here is a correct guess 
      if((card1 < card2 && guess.equalsIgnoreCase("H")) || 
       (card1 > card2 && guess.equalsIgnoreCase("L"))) 
      { 
       askAgain = true; 
      } 
      else 
      { 
       loseMessageDetails = guess.equalsIgnoreCase("L") ? loseHigh : loseLow; 
       gameLost = true; 
      } 
     } 
    } 

這也將確保只有有效的輸入,並繼續要求輸入,直到用戶輸入正確的字母。

+0

通過改變這一點,並以他們的方式,我想要他們,它的作品絕對完美無瑕,我不能非常感謝你!我花了比我應該做的更多的時間! – SeanHub

+0

非常歡迎!我很高興你能夠改變它並修改成你當前的項目! –

+0

要成爲一個痛苦,我將如何實現輸入檢查器到這?確保只使用H,L,Y和N? – SeanHub