首頁 >Java >java教程 >為什麼 `nextLine()` 在 `nextInt()` 之後會出現錯誤行為以及如何修復?

為什麼 `nextLine()` 在 `nextInt()` 之後會出現錯誤行為以及如何修復?

Barbara Streisand
Barbara Streisand原創
2024-12-14 13:30:11457瀏覽

Why Does `nextLine()` Misbehave After `nextInt()` and How Can It Be Fixed?

修正nextLine() 行為

第二個程式碼範例中使用nextLine() 時遇到的問題源自於nextInt() 的組合和nextLine().

問題nextInt()

nextLine() 消耗整行,包括空格和按 Enter 鍵之前輸入的字元。但是,nextInt() 僅消耗數值。如果數字後面有非數字字元或空格,nextLine() 將嘗試讀取它們,從而導致意外行為。

解決方案:消耗剩餘換行符

以確保nextLine() 按預期讀取完整行,您可以在每個nextInt() 之後添加一個nextLine( ) 呼叫以消耗該行上的任何剩餘字元。這確保了當使用 nextLine() 讀取句子時,它將收到完整的一行。

修正範例:

// Example #2 (Corrected)
import java.util.Scanner;

class Test {
    public void menu() {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("\nMenu Options\n");
            System.out.println("(1) - do this");
            System.out.println("(2) - quit");

            System.out.print("Please enter your selection:\t");
            int selection = scanner.nextInt();
            scanner.nextLine(); // Consume remaining newline

            if (selection == 1) {
                System.out.print("Enter a sentence:\t");
                String sentence = scanner.nextLine();

                System.out.print("Enter an index:\t");
                int index = scanner.nextInt();

                System.out.println("\nYour sentence:\t" + sentence);
                System.out.println("Your index:\t" + index);
            }
            else if (selection == 2) {
                break;
            }
        }
    }
}

以上是為什麼 `nextLine()` 在 `nextInt()` 之後會出現錯誤行為以及如何修復?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn