本文介紹了為什么關閉掃描儀似乎會損壞新的掃描儀?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
import java.util.Scanner;
public class Foo {
public static void main(String[] args) {
Foo foo = new Foo();
foo.getNextToken();
foo.getNextToken();
}
public void getNextToken() {
Scanner s = new Scanner(System.in);
while (true) {
if (s.hasNext()) {
System.out.println(s.nextLine());
//s.close();
return;
}
}
}
}
當我嘗試運行上面的代碼時,它的工作方式可能與您預期的一樣。
每次我插入一行時,計算機都會粘貼下一行。
但是,如果我取消對s.lose()行的注釋,然后再次運行,我會得到以下行為:
由于某些原因,hasNext()方法連續返回FALSE,盡管有非常明顯的下一個參數。我嘗試了很多方法,但找不到任何解決方法。例如,如果我將代碼更改為只
public void getNextToken() {
Scanner s = new Scanner(System.in);
System.out.println(s.nextLine());
s.close();
return;
}
然后,它再次適用于第一條語句,但隨后立即給出了NoSuchElementException異常。
當然,如果你不關閉第一個掃描儀,它工作得很好。
我不明白為什么關閉一臺掃描儀會影響另一臺掃描儀,但我聽說不關閉掃描儀是不好的做法,更重要的是,如果我不關閉,會出現惱人的黃色錯誤消息。有人能告訴我解決這個問題的方法嗎?為什么會發生這種情況?我可以在main方法中將scanner作為參數傳遞,也可以在那里關閉它,但這看起來有點混亂。
推薦答案
,因為您已關閉System.in
。別干那事。不要關閉掃描儀。也不要創造新的。繼續用同一個就行了。它仍然可以工作。
在同一基礎輸入上使用多個掃描儀確實是不好的做法。您將丟失數據。
這篇關于為什么關閉掃描儀似乎會損壞新的掃描儀?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,