[英]Simple menus using Do-while loops in java
我正在嘗試使用Java中的do-while循環制作一個簡單的菜單。 我的代碼如下所示:
int choice;
Scanner scanChoice = new Scanner(System.in);
do {
System.out.println("Pick an option. 1 2 or 3.");
System.out.println("1. Apple");
System.out.println("2. Pear");
System.out.println("3. Pineapple");
choice = scanChoice.nextInt();
} while (choice < 1 || choice > 3);
System.out.println("You picked " + choice);
問題是,每次我嘗試運行它時,它都會引發“ java.util.NoSuchElementException”。 完整錯誤如下:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at mainPackage.Main.fruitMenu(Main.java:135)
at mainPackage.Main.main(Main.java:103)
我知道這是因為scanChoice.hasNextInt()
返回false,但是我不確定如何解決此問題。 當我添加一條if語句( if (scanChoice.hasNextInt())
,方法scanChoice.hasNextInt()
仍返回false,因此它僅經過初始化變量choice
的那一行,並且該變量從未初始化。
有人知道怎么修這個東西嗎?
編輯:問題是它不等待用戶輸入另一個整數。 函數scanchoice.nextInt()
和函數scanChoice.nextLine()
都立即不返回任何值,而無需等待用戶輸入值。 有什么辦法讓它等待輸入嗎?
它似乎一直對我有用。 對於任何有效的整數,它都可以按預期方式工作,無論是接受輸入還是經過循環,當鍵入無效輸入(如“ abcd”)時,它都會引發InputMismatchException
,無論如何這都是預期的行為。
我使您的代碼更加健壯。 它捕獲字母數字字符並再次顯示菜單,而不是出現InputMismatchException異常。
這是一個測試運行。
Pick an option. 1 2 or 3.
1. Apple
2. Pear
3. Pineapple
x
Pick an option. 1 2 or 3.
1. Apple
2. Pear
3. Pineapple
asdf
Pick an option. 1 2 or 3.
1. Apple
2. Pear
3. Pineapple
2
You picked 2
這是代碼。 我稱它為Scanner nextLine方法。
package com.ggl.testing;
import java.util.Scanner;
public class MenuTest {
public static void main(String[] args) {
int choice;
Scanner scanChoice = new Scanner(System.in);
do {
System.out.println("Pick an option. 1 2 or 3.");
System.out.println("1. Apple");
System.out.println("2. Pear");
System.out.println("3. Pineapple");
String input = scanChoice.nextLine();
choice = convertToInteger(input.trim());
} while (choice < 1 || choice > 3);
System.out.println("You picked " + choice);
scanChoice.close();
}
private static int convertToInteger(String input) {
try {
return Integer.valueOf(input);
} catch (NumberFormatException e) {
return Integer.MIN_VALUE;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.