2

スキャナーが無期限の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()、最終的にはaNoSuchElementExceptionになりますが、2回目の反復では、ユーザー入力をブロックしません。

    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);

何かご意見は?

4

1 に答える 1

0

以下は私にとってはうまくいきます:

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;
        }
    }
}
于 2013-02-09T16:39:25.097 に答える