的兩兩件事之一可能是在這裏完成或者更換例外與別的東西扔這將是這樣的:
內部Game.main()改變這一:
try{
jar.guess();
} catch(IllegalArgumentException iae){
System.out.println("Please choose a valid number");
}
這樣:
jar.guess();
簡單地刪除嘗試捕捉檢查和內部Jar.guess()更改此:
if(guess>maxNumberOfItems){
throw new IllegalArgumentException();
} else if (guess<1){
throw new IllegalArgumentException();
}
這樣:
//該||是指邏輯或,如果滿足2個條件比如果爲true,將在此情況下閱讀真正
if(guess>maxNumberOfItems || guess<1){
System.out.println("Please choose a valid number");
}
但是如果你使用的例外學習例外比你遇到的問題的原因是因爲2事情 首先 - 當在guess()中發生異常但未被捕獲時,java的異常系統檢查guess()是否希望拋出異常,在您的情況下它不會拋出異常,這意味着異常從不會猜到)和異常錯誤,你的try catch永遠不會看到異常。 您告訴方法傳遞某種類型的任何異常的方式是將關鍵字拋出,後面跟着它應該在()和方法頭的開頭(如下所示)之間傳遞的異常類型:
public void guess() throws IllegalArgumentException {
,但只允許你目前的嘗試捕捉看到異常,並在這種情況下,示數出
爲了讓它保持在提示猜測,並在嘗試捕捉停止程序必須是內while循環首先導致重複的猜測。要做到這一點,你可以把嘗試捕捉在猜()
while(guess != numberOfItems){
try{
if(guess>maxNumberOfItems){
throw new IllegalArgumentException();
} else if (guess<1){
throw new IllegalArgumentException();
}
} catch(IllegalArgumentException iae){
System.out.println("Please choose a valid number");
}
prompter.tryAgain();
guess = scanner.nextInt();
numberOfGuesses++;
}
,或者你可以添加拋出:IllegalArgumentException - 子句來猜()和移動while循環(和一些存儲的東西像數的變量猜測)的猜測之外()有猜測()爲每調用一次猜測,而不是每一次比賽
更多信息有關throws子句檢查Oracle的Java文檔here
https://stackoverflow.com/help/mcve –
是否有必要拋出一個IllegalArgumentException如果不能使用if else來檢查in如果不是,則輸入是否有效,然後只需打印錯誤消息並讓程序繼續。 –