2014-06-20 59 views
1

我似乎有這個問題很多,我不能完全似乎明白瞭如何工作的掃描儀我的掃描儀會要求輸入兩次

System.out.println("Please enter a number"); 
Scanner choice1 = new Scanner(System.in); 
int choiceH = choice1.nextInt(); 

while(!choice1.hasNextInt()){ 
    System.out.println("Please enter a number"); 
    choice1.next(); 
} 

我想要什麼的代碼做的就是要求一個數,並檢查輸入是否是一個數字。 我的問題是,它會問號碼兩次,我不知道爲什麼。

回答

0

在線路

Scanner choice1 = new Scanner(System.in); 

緩衝區將是空的。當你到達線

int choiceH = choice1.nextInt(); 

你輸入一個數字,然後按Enter鍵。在此之後,號碼將被存儲在緩衝區中並被消耗(緩衝區將再次爲空)。當你到達線

while (!choice1.hasNextInt()) 

程序會檢查是否有在緩衝區中的int,但在這一刻,這將是空的,所以hasNextInt將返回false。所以,條件是true,程序會再次要求int

你如何解決它?您可以刪除第一個nextInt

System.out.println("Please enter a number"); 
Scanner choice1 = new Scanner(System.in); 
int choiceH = -1; // some default value 

while (!choice1.hasNextInt()) { 
    System.out.println("Please enter a number"); 
    choice1.nextInt(); 
} 
0

如果這行代碼執行成功:

int choiceH = choice1.nextInt(); 

然後用戶輸入一個int和解析成功。沒有理由再次檢查hasNextInt()

如果用戶沒有輸入int,那麼nextInt()將拋出一個InputMismatchException,您應該簡單地捕獲它,並再次提示用戶。

boolean succeeded = false; 
int choiceH = 0; 
Scanner choice1 = new Scanner(System.in); 

do { 
    try { 
     System.out.println("Please enter a number"); 
     choiceH = choice1.nextInt(); 
     succeeded = true; 
    } 
    catch(InputMismatchException e){ 
     choice1.next(); // User didn't enter a number; read and discard whatever was entered. 
    } 
} while(!succeeded);