本文介紹了為什么關(guān)閉掃描儀似乎會(huì)損壞新的掃描儀?的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
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;
}
}
}
}
當(dāng)我嘗試運(yùn)行上面的代碼時(shí),它的工作方式可能與您預(yù)期的一樣。
每次我插入一行時(shí),計(jì)算機(jī)都會(huì)粘貼下一行。
但是,如果我取消對(duì)s.lose()行的注釋?zhuān)缓笤俅芜\(yùn)行,我會(huì)得到以下行為:
由于某些原因,hasNext()方法連續(xù)返回FALSE,盡管有非常明顯的下一個(gè)參數(shù)。我嘗試了很多方法,但找不到任何解決方法。例如,如果我將代碼更改為只
public void getNextToken() {
Scanner s = new Scanner(System.in);
System.out.println(s.nextLine());
s.close();
return;
}
然后,它再次適用于第一條語(yǔ)句,但隨后立即給出了NoSuchElementException異常。
當(dāng)然,如果你不關(guān)閉第一個(gè)掃描儀,它工作得很好。
我不明白為什么關(guān)閉一臺(tái)掃描儀會(huì)影響另一臺(tái)掃描儀,但我聽(tīng)說(shuō)不關(guān)閉掃描儀是不好的做法,更重要的是,如果我不關(guān)閉,會(huì)出現(xiàn)惱人的黃色錯(cuò)誤消息。有人能告訴我解決這個(gè)問(wèn)題的方法嗎?為什么會(huì)發(fā)生這種情況?我可以在main方法中將scanner作為參數(shù)傳遞,也可以在那里關(guān)閉它,但這看起來(lái)有點(diǎn)混亂。
推薦答案
,因?yàn)槟殃P(guān)閉System.in
。別干那事。不要關(guān)閉掃描儀。也不要?jiǎng)?chuàng)造新的。繼續(xù)用同一個(gè)就行了。它仍然可以工作。
在同一基礎(chǔ)輸入上使用多個(gè)掃描儀確實(shí)是不好的做法。您將丟失數(shù)據(jù)。
這篇關(guān)于為什么關(guān)閉掃描儀似乎會(huì)損壞新的掃描儀?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,