2015-08-29 44 views
0

當我運行程序和用戶輸入字段出現時,當我只是在沒有輸入任何內容的情況下回車時,會出現另一個輸入字段。如果我繼續敲擊輸入,反覆發生。如果有辦法解決這個問題,請讓我知道。我找不到任何文件修復它。獲取關於第一個基本Java程序的一些指針/建議?

import java.util.Scanner; 
import java.util.Random; 

class Game { 

public static void main(String[] args) { 

    Scanner sc = new Scanner(System.in); 
    //generate a random number 
    //take user input 
    //check the input act appropriately 
    boolean running = true; 
    boolean guessed = true; 
    boolean realInt = true; 


    int number = 0; 
    int input = 0; 

    String firstName=" "; 


    System.out.print("want to play the game? Yes/No: "); 
    firstName = sc.next(); 



    while (running) { 

    if (guessed && (("yes".equals(firstName)) | ("cheater".equals(firstName)))){ 


     System.out.println("I have chosen a random value"); 
     System.out.println("Have a go at guessing it"); 

     Random rand = new Random(); 
     number = rand.nextInt(10) + 1;   

     guessed = false; 


    } 


    if(("yes".equals(firstName)) | ("cheater".equals(firstName))) 
    { 

      if(sc.hasNextInt()) { 
      realInt=true; 
      input = sc.nextInt(); 
      } 
      else{ 
      System.out.println("That is not an integer."); 
      running = false; 
      } 


     } 

    else 
     running = false; 


    if((((input != number) && realInt)&&(input != -1))){ 
      System.out.println("Plsease try again"); 
     } 

    //below line sets up when to stop the program, when -1 is entered 
     if (input == -1){ 
      running = false; 
     } 
     else{ 
      guessed = input == number; 
     } 

    //below lines are cheat codes 

    if (input == -5){ 
     System.out.println("Answer: " + number); 
    } 


    if ("cheater".equals(firstName) && (input != number)){ 
      System.out.println("Answer: " + number); 

     } 


    } 


} 

} 
+0

我已經將您的問題的「代碼審查」部分遷移到代碼審查,但試圖在這裏保留「不起作用」的部分問題(其中027的答案很好)。今後,請每個問題只問一個問題:)。 – Matt

回答

2

這是由於Scannernext()方法如何讀取輸入的方式。

掃描程序使用定界符模式將其輸入分爲標記,默認情況下該定界符與空白匹配。

所以,即使你擊中輸入數量,也不會有任何令牌,因此Scanner只是等待用戶擁有一個有效的令牌,以便可以讀取並繼續讀取下一個令牌。

public String next() 

查找並返回來自此掃描器的下一個完整標記。完整的令牌前後有與分隔符模式匹配的輸入。即使先前調用hasNext()返回true,該方法也可能在等待輸入進行掃描時阻塞。

解決方案: 使用掃描儀的hasNextLine()和nextLine()方法。它將允許您捕獲空白或空白線。有關其他方法,請參閱Java網站上的API。