2016-12-11 65 views
2

我正準備參加基礎編程考試。我現在正在處理異常,但似乎無法弄清楚如何最好地使用它。我給你的第一個代碼,然後第二個我試圖做一個檢查異常。任何對此的意見都會讓我感激不盡!Java,異常,最好的方式,考試準備

沒有例外:

public boolean uttak(int species, int kroner, int skilling) { 
    if (species<=this.species && kroner<=this.kroner && skilling <=this.skilling) 
    { 
     this.species -=species; 
     this.kroner -=kroner; 
     this.skilling -=skilling; 
     return true; 
    } 
    else return false; 

與我凌亂的例外:

public void uttak(int species, int kroner, int skilling){ 
    try{ 
     if (species<=this.species && kroner<=this.kroner && skilling <=this.skilling) 
     { 
      this.species -=species; 
      this.kroner -=kroner; 
      this.skilling -=skilling; 
     } 
    } 
    catch (Exception e){ 
     System.err.println ("Withdrawals can not be done when there is" + 
          " insufficient money in the machine."); 
    } 
+0

請重新格式化您的代碼,它是不可讀 – aleb2000

+1

和POST使用英文代碼,否則我們無法理解任何事情。 –

+0

異常只能用於破壞正常邏輯的內容。這是這種情況嗎? –

回答

1

你可能正在尋找這樣的事情:

// custom checked exception type 
public class WithdrawalException extends Exception { 
    public WithdrawalException(String msg) { 
     super(msg); 
    } 
} 
public boolean uttak(int species, int kroner, int skilling) throws WithdrawalException { // checked exceptions need to be declared in the throws clause 
    if (species<=this.species && kroner<=this.kroner && skilling <=this.skilling) 
    { 
     this.species -=species; 
     this.kroner -=kroner; 
     this.skilling -=skilling; 
     return true; 
    } 
    else 
     // throw an exception 
     throw new WithdrawalException("Withdrawals can not be done when there is insufficient money in the machine."); 
} 

並使用它調用代碼類似這樣

try { 
    uttak(i1, i2, i3); 
} catch (WithdrawalException ex) { 
    System.err.println("Something went wrong. Message: "+ex.getMessage()); 
} 
1

他們都不是正確的,我(如果這是一個關於例外主題)。

它是拋出一個未經檢查的異常當方法參數之一不滿足其方法的邏輯的好方法:

if (species > this.species || kroner > this.kroner || skilling > this.skilling) { 
    throw new IllegalArgumentException("message"); 
} 

如果您在方法執行過程中有一個邏輯問題,遇到,你通常應該拋出checked異常(你自己的Exception的子類,或任何其他特定checked異常):

if (species > this.species || kroner > this.kroner || skilling > this.skilling) { 
    throw new MyCustomCheckedException("message"); 
} 

沒有理由在此級別上處理異常(假設它在try塊中的某個位置拋出,但它不在您的情況)。

+0

謝謝!我不知道如何使用「扔」「嘗試」和「抓」。我正在和一些舊的考試合作:) – Muriel

+0

@Muriel,你掙扎着什麼困難? – Andrew

+0

這是非常糟糕的主意。爭論沒有錯。問題是帳戶資金不足。你應該拋出一個域例外。 – Bohemian