2011-12-25 49 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