Java 扫描器在循环期间不阻塞

标签 java while-loop iteration java.util.scanner

我遇到了一个问题,即 Scanner 在无限期 while 循环期间没有阻止用户输入。我试过使用 hasNextLine() 但没有用。它只是运行无限调用 displayMenu() 的循环。

     do {

        displayMenu();

        int response;
        while (iStream.hasNextLine()) {
            response = Integer.parseInt(iStream.nextLine());

            switch (response) {
                case 1:
                    decodeMessage(getPhrase());
                    break;
                case 2:
                    encodeMessage(getPhrase());
                    break;
                case 3:
                    displayAlphabet();
                    break;
                case 4:
                    done = true;
                    System.out.println("Goodbye.");
                    break;
                default:
                    done = false;
            }
        }

    }
    while (!done);

我也尝试过不使用 hasNextLine() 但我最终得到了一个 NoSuchElementException 因为它第一次完美运行但在第二次迭代中,它没有' 用于用户输入的 block 。

    do {

        displayMenu();

        int response = Integer.parseInt(iStream.nextLine());

            switch (response) {
                case 1:
                    decodeMessage(getPhrase());
                    break;
                case 2:
                    encodeMessage(getPhrase());
                    break;
                case 3:
                    displayAlphabet();
                    break;
                case 4:
                    done = true;
                    System.out.println("Goodbye.");
                    break;
                default:
                    done = false;

        }

    }
    while (!done);

有什么想法吗?

最佳答案

以下对我来说效果很好:

private static void displayMenu ()
{
    System.out.println ("Menu:");
    System.out.println ("\t1: Decode message");
    System.out.println ("\t2: Encode message");
    System.out.println ("\t3: Display alphabet");
    System.out.println ("\t4: Exit");
}

public static void main (String [] args)
{
    Scanner scanner = new Scanner (System.in);

    boolean done = false;
    while (!done)
    {
        displayMenu();

        switch (Integer.parseInt (scanner.nextLine ()))
        {
            case 1:
                System.out.println ("Decoding...");
                break;
            case 2:
                System.out.println ("Encoding...");
                break;
            case 3:
                System.out.println ("Displaying alphabet...");
                break;
            case 4:
                System.out.println("Exitting...");
                done = true;
                break;
            default:
                done = false;
        }
    }
}

关于Java 扫描器在循环期间不阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14790142/

相关文章:

java - 无法连接到 MariaDB

java - 需要在 while 循环内更新变量

java - java中异常时无限循环

使用 foreach 循环遍历数组两次并通过引用传递值的 php 问题

Java:迭代 2 个列表的最佳/优雅方式

java - 你能对混淆代码进行单元测试吗?

java - android setEnabled但未更改文本

java - 如何从Java中的多个方法中进行绘制?

java - 使用 while 循环打印用户请求的次数

algorithm - 二维网格方向迭代