我正在尝试使用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
的行,并且该变量永远不会被初始化。 / p>
任何人都知道如何解决这个问题?
编辑:问题是它不会等待用户输入另一个整数。函数scanchoice.nextInt()
和函数scanChoice.nextLine()
都不会立即返回任何值,而无需等待用户输入值。有什么方法让它等待输入?
答案 0 :(得分:0)
它似乎一直对我有用。对于任何有效的整数,它按预期工作,要么接受输入要么通过循环,当输入无效输入如“abcd”时它会抛出InputMismatchException
,这无论如何都是预期的行为。
答案 1 :(得分:0)
我让您的代码更加强大。它捕获字母数字字符并再次显示菜单,而不是使用InputMismatchException异常终止。
这是一次试运行。
http://www.dn.se/sport/fotboll/cavani-het-i-svalt-psg/
http://www.dn.se/sport/fotbolls-em/kompany-missar-em/
http://www.dn.se/nyheter/sverige/livvaktens-slakting-fick-praktik-hos-sahlin-trots-myndighetens-avslag/
http://www.dn.se/sport/st-louis-andraperiod-avgjorde/
http://www.dn.se/nyheter/varlden/syrien-spanska-journalister-fria/
http://www.dn.se/sport/dansk-dynamit-ska-stoppa-tre-kronor/
http://www.dn.se/nyheter/sverige/mordmisstankt-slappt-ur-haktet-1/
http://www.dn.se/nyheter/varlden/ekonomiprofessor-loste-ekvation-togs-for-terrorist/
http://www.dn.se/sport/fotboll/leicester-firade-med-storseger/
http://www.dn.se/ekonomi/protester-mot-ny-granskontroll-urartade/
http://www.dn.se/sport/ishockey-vm/jimmie-ericsson-jag-ar-beredd-gora-allt-for-att-vinna/
http://www.dn.se/sport/ishockey-vm/schweiz-straffat-av-kazakstan/
http://www.dn.se/nyheter/varlden/natosoldater-dodade-i-afghanistan-2/
http://www.dn.se/sport/forsta-matchen-till-eslov/
http://www.dn.se/nyheter/sverige/drunknad-man-hittad-av-dykare/
http://www.dn.se/ekonomi/tagstopp-efter-olycka/
http://www.dn.se/sport/kristianstad-till-sm-final/
http://www.dn.se/sthlm/en-person-attackerad-med-kniv-i-centrala-stockholm/
http://www.dn.se/nyheter/sverige/inga-spar-efter-forsvunnen-22-arig-student/
http://www.dn.se/sport/fotboll/forlust-for-rydstrom-i-tranardebuten/
http://www.dn.se/nyheter/sverige/manga-grasbrander-runt-om-i-landet/
http://www.dn.se/nyheter/sverige/tre-gripna-efter-skottlossning-i-malmo/
http://www.dn.se/sport/fotboll/elfsborg-ar-med-i-toppen-igen/
http://www.dn.se/sport/em-silver-till-rissveds/
这是代码。我打电话给Scanner nextLine方法。
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