[英]Why won't the scanner prompt me for an input?
我有這種方法:
public String scanInput()
{
String input = "";
Scanner skanner = new Scanner(System.in);
while(skanner.hasNextLine()){
input = skanner.nextLine();
}
skanner.close();
return input;
}
第一次運行此方法時,程序將停止,並提示我在控制台中進行輸入,然后才能繼續進行。 但是,第二次運行該方法時,它閃爍而沒有暫停,並且我的程序陷入了無限循環。
此方法的哪一行使程序暫停,為什么只在第一次暫停?
您即將在方法結束時關閉掃描儀。 這將關閉正在處理的流-在這種情況下為System.in
。 這意味着下次調用該方法時,流仍然關閉,因此沒有行。
您應該設置一個 Scanner
,並將其傳遞到方法中(或將其作為類中的狀態)。
您的程序閃爍而沒有暫停第二次運行的原因是因為System.in
已關閉-關閉Scanner
對象將關閉基礎流。
正如喬恩(Jon)所提到的,實際上應該一次在此功能之外設置掃描儀,然后將其傳遞給方法。
要回答第二個問題-導致程序暫停的行是.nextLine()
調用。 nextLine()
是所謂的“阻止函數”。
現在,您的代碼只能運行一次,因為System.in
本質上是控制台。 您不能“打開” System.in
。 關閉的流無法重新打開。
是的,每次調用該函數時,您都在創建一個新的Scanner
但是創建Scanner
對象並不會創建新的流Scanner
對象僅將流作為參數。
skanner.hasNextLine()
在這種情況下返回false,因為它不會從文件/網站等讀取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.