[英]How to use java.util.Scanner to correctly read user input from System.in and act on it?
[英]How can I prevent java.util.Scanner from throwing NoSuchElementException when reading from System.in?
我正在嘗試使用 Scanner.nextDouble() 向用戶詢問雙精度值; 但在我有機會輸入任何內容之前,我收到了 NoSuchElementException。 從我在文檔中看到的,這意味着 Scanner 位於輸入的末尾。 但是,我不明白當掃描儀從 System.in 而不是文件中讀取時會發生這種情況。
打開其他掃描儀是否有可能導致這種情況? 我不認為應該是這種情況,因為在此打開和關閉另一個掃描儀的代碼之前成功運行了另一種方法。 但我對 Scanner 的來龍去脈(或其他很多!)知之甚少,不知道這是否是問題所在。
這是我目前所處的位置,在嘗試重新編寫此代碼以使其正常工作多次失敗后:
public static double collectDepositAmount(int accountNum){
System.out.print("Enter how much you would like to deposit in Account #" + accountNum + ": $");
Scanner userInput = new Scanner(System.in);
double finalDeposit;
try{
double inputDeposit;
inputDeposit = userInput.nextDouble();
之后還有更多,但在userInput.nextDouble();
處總是拋出異常userInput.nextDouble();
. catch
塊只查找 InputMismatchException,我在返回有效雙userInput
之前關閉userInput
。
[A] 你在調用它之前關閉了System.in
,這比你想象的要容易。 這將做到:
try (Scanner s = new Scanner(System.in)) {
// stuff here
}
在 try 塊完成后, System.in 現在關閉(解決方案:不要關閉System.in
;也不要關閉任何環繞System.in
東西)。
但是,也可能只是下一個可用的令牌不是 double ,那么您也會得到完全相同的行為。 要“檢測”它,請改為調用.next()
,看看您是否確實得到了一些東西(以及,例如,通過打印它是什么)。 可能是您輸入5,20
並且系統希望您使用點作為小數點分隔符(例如5.20
),因此得出下一個標記不是雙5,20
,並拋出相同的異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.