2011-12-25 96 views
1

我正在學習java,我試圖做一個非常簡單的應用程序,做貨幣轉換。您輸入一個匯率,一個方向(例如:從歐元到美元或相反)和金額。數字有效的非負數。java errorhandling:如何檢查numberformatexceptions

到目前爲止,我設法讓它的數目不能爲負;現在我需要拋出一個錯誤,如果它不是一個數字。 我有以下代碼:

public void setKoers(double koers) 
      throws NegativeValueException, NumberFormatException{ 
    if (koers > 0) { 
      this.koers=koers; 
     } else { 
      throw new NegativeValueException("negative number"); 
     } 
} 

和我的主要模樣

try { 
      cal.setKoers(Double.parseDouble(args[0])); 

      } catch(NegativeValueException e) { 
      System.out.println(e.getMessage()); 
      } catch (NumberFormatException e) { 
      System.out.println(e.getMessage()); 
      } 

所以,我怎麼能檢查是否koers是一個數字或沒有。 我知道我可以把嘗試和捕獲的錯誤在我的代碼,但我認爲這將違背的地方,以及如何處理錯誤的邏輯:在我的主要功能我應該抓住任何NumberFormatException

+2

我在你問糊塗了。 Double.parseDouble(args [0])可以引發NumberFormatException。不知道爲什麼你的setKoers方法有一個throws子句。 – Corbin 2011-12-25 23:26:42

回答

2

你不需要NumberFormatException因爲Double.parseDouble()爲你照顧。如果它不是一個合適的數字(在這種情況下,一個Double)比parseDouble()方法將爲您扔NumberFormatException

這是我會怎麼寫:(剛取出NumberFormatException

public void setKoers(double koers) throws NegativeValueException { 
    if (koers > 0) { 
      this.koers=koers; 
     } else { 
      throw new NegativeValueException("negative number"); 
     } 
} 

try{ 
    cal.setKoers(Double.parseDouble(args[0])); 

    } catch(NegativeValueException e) { 
     System.out.println(e.getMessage()); 
    } catch (NumberFormatException e) { 
     System.out.println(e.getMessage()); 
    } 
0

你可能會想在用戶通知程序接受並處理輸入時驗證輸入。在這部分代碼中,您可以通過解析在try/catch塊內的輸入將字符串轉換爲數字,然後如果遇到異常,請通知用戶錯誤,阻止進一步處理,並且可能清除任何有問題的輸入字段(如果存在)。

+0

我可能錯過了一些東西,但據我所知,Swing從未被提及,也沒有一般的GUI。 – Corbin 2011-12-25 23:30:20

+0

@Corbin:你是對的,我錯了。感謝銳利的眼睛。 – 2011-12-25 23:31:49