簡體   English   中英

掃描儀為什么不提示我輸入?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM