在java中使用Do-while循环的简单菜单

时间:2016-05-07 15:06:01

标签: java do-while

我正在尝试使用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()都不会立即返回任何值,而无需等待用户输入值。有什么方法让它等待输入?

2 个答案:

答案 0 :(得分:0)

它似乎一直对我有用。对于任何有效的整数,它按预期工作,要么接受输入要么通过循环,当输入无效输入如“abcd”时它会抛出InputMismatchException,这无论如何都是预期的行为。

Online Java compiler IDE

答案 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