我是新來的java,但我已經試驗了很多這個特定的程序,我打了一堵牆。該程序的目的是捕捉用戶是否輸入超出變量限制的值,並驗證輸入是否滿足我指定的範圍。驗證輸入和防止嘗試/趕上退出
- 如果輸入超過變量限制而沒有while循環,程序將退出。
- 如果輸入超出了while循環的變量限制,它將無限循環。
我用while循環和我的三個結果嘗試此:
- 用戶輸入一個程序員指定有效數字,一切都很好。
- 用戶輸入一個高於100的數字,並提示再次嘗試...
- 用戶超出變量限制,程序進入 無限循環。
如果我在catch塊中放置一個轉義,它的作用就好像不存在時一樣。我希望程序打印錯誤,但允許用戶重試一個值。
while(!success){
try{
sh = sc.nextShort();
while(sh < 1 || sh > 100){
System.out.print("You must enter a value between 1-100: ");
sh = sc.nextShort();
} //close try
System.out.println("Great job!");
success = true; //escape the while
}catch{Exception ex){
System.out.println("ERROR: " + ex);
success = false; //causes infinite loop... I understand
} //close catch
} //close while
我不知道我理解你的問題,但我懷疑你的問題是,第一'SH = sc.nextShort();'在try-block中。如果那是你所有的代碼,我作爲一個用戶不會知道我必須輸入一些東西,所以我會等待程序打印一些東西,程序會等待我的輸入 - 一個典型的死鎖。我懷疑發生錯誤時會發生同樣的情況,即它會打印錯誤,然後再次啓動外部循環的主體,該主體開始等待輸入數字。打印出錯後,一個簡單的「修復」就是打印「再試一次:」這樣的內容。 – Thomas
[使用java.util.Scanner驗證輸入]的可能重複(https://stackoverflow.com/questions/3059333/validating-input-using-java-util-scanner) – Tom
問題是,當引發異常時,它會無限循環錯誤消息。我通過在catch中創建一個新的「Try again:」提示符和掃描器來跟蹤下面的帖子。它很實用,但我仍然有很多學習要做,以便準確理解發生了什麼。 感謝您的建議! – kaygeee