簡體   English   中英

使用Java中的Do-while循環的簡單菜單

[英]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 ,無論如何這都是預期的行為。

在線Java編譯器IDE

我使您的代碼更加健壯。 它捕獲字母數字字符並再次顯示菜單,而不是出現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM