2017-03-25 69 views
-5

我目前正在進行一項猜測遊戲,並且我已經開始工作了(如果有人對它進行測試並評論他們認爲我會將我的GitHub回購庫鏈接到底部,我將非常感激它。但是我仍然有一個小問題,當用戶輸入一個非法的猜測(高於jar中的最大數量或者小於1)時,IllegalArgumentException被拋出(就像我設計的那樣),但程序停止提示用戶猜測,我無法自己弄清楚如何讓它繼續提示。如果有人可以幫助我,我會非常感激。關於這個項目的另一個問題是,「在提示器類中封裝I/O」是什麼意思?我做了一個Prompter,但我不確定實施是否真的很好,如果有人有任何想法,我可以如何改進這個計劃,我真的很樂意聽到他們。改善我的猜謎遊戲

這是程序:https://github.com/Melodie95/Treehouse-Project-1-

感謝提前:)

+1

https://stackoverflow.com/help/mcve –

+0

是否有必要拋出一個IllegalArgumentException如果不能使用if else來檢查in如果不是,則輸入是否有效,然後只需打印錯誤消息並讓程序繼續。 –

回答

0

的兩兩件事之一可能是在這裏完成或者更換例外與別的東西扔這將是這樣的:

內部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