首頁 >Java >java教程 >為什麼 Java 中的「scanner.nextLine()」與「scanner.nextInt()」之後的行為不同?

為什麼 Java 中的「scanner.nextLine()」與「scanner.nextInt()」之後的行為不同?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-27 07:21:09889瀏覽

Why Does `scanner.nextLine()` Behave Differently After `scanner.nextInt()` in Java?

使用Scanner.nextLine() 進行使用者輸入

問題:

為什麼🎜>問題:

// Working Example
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a sentence: ");
String sentence = scanner.nextLine();
// Not Working Example
while (true) {
    System.out.print("Enter a sentence: ");
    int selection = scanner.nextInt();
    String sentence = scanner.nextLine();
}

答案:

行為上的差異源自於scanner.nextInt() 與scanner.nextLine() 相比消耗如何輸入。

在工作範例中,scanner.nextLine() 讀取整行輸入,包括空格,直到它遇到一個換行符。相較之下,scanner.nextInt() 僅讀取輸入的整數部分,將所有剩餘字元保留在輸入緩衝區中。

當使用nextInt() 呼叫而沒有任何後續調用nextLine() 時,任何輸入緩衝區中剩餘的字元(例如換行符)不會被消耗,這可能會導致後續的nextLine() 調用出現問題。

在非工作範例中,在使用者輸入一個數字,剩餘的換行符號不會被 nextInt() 消耗。因此,對 nextLine() 的後續呼叫會立即讀取換行符,導致將空字串指派給句子。

要解決此問題,可以在每個nextInt() 呼叫以消耗輸入緩衝區中的所有剩餘字元。

以上是為什麼 Java 中的「scanner.nextLine()」與「scanner.nextInt()」之後的行為不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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