用于检查原始类型的Java异常处理

时间:2014-10-27 12:34:32

标签: java exception exception-handling primitive

我有一个模拟加油站的GUI程序。

在程序中,有3个输入字段:

  • ITEMNAME
  • 单位数(或L中的数量)
  • 和便士(每单位或升)的金额。

然后,您可以选择按卷或按单位添加项目。我们的想法是,你可以用最少的输入盒购买燃料和其他物品(如食物)。

我使用异常处理检查输入是我想要的:

  • 要按单位添加的int
  • double值按卷添加。

到目前为止,我的代码识别出在需要整数的地方输入了一个double,并抛出错误。

例如,输入:item Name: Chocolate, Amount(or Litres): 2.5, Price: 85会出现错误:The code used looks like this

if (e.getSource () == AddByNumOfUnits) {
    try {
        Integer.parseInt(NumOfUnitsField.getText());
    } catch (NumberFormatException exception) {
        SetErrorField("Input must be the appropriate type (real number for volume, integer for units)");
    }

但是,按体积添加时,我无法让程序只接受double值或任何使用小数点的值。 int可以传入并接受为double值,我不想要。我使用的代码非常相似:

if (e.getSource() == AddByVolume) {
    try {
        double itemVolume = Double.parseDouble(NumOfUnitsField.getText());
    } catch (NumberFormatException exception) {
        SetErrorField("Input must be the appropriate type (real number for volume, integer for units)");
    }

如果有人能指出我正确的方向解决这个问题,那就太好了。

谢谢

2 个答案:

答案 0 :(得分:1)

试试这个。它检查数字是否包含a。 char会使它变成双重

try {
    if(!NumOfUnitsField.getText().contains(".")){
        throw new NumberFormatException("Not a double");
    }
    double itemVolume = Double.parseDouble(NumOfUnitsField.getText());
} catch (NumberFormatException exception) {
    SetErrorField("Input must be the appropriate type (real number for volume, integer for units)");
}

编辑:结合代码框回答解决方案

try {
    Pattern p = Pattern.compile("\\d+\\.\\d+");
    if(!p.matcher(NumOfUnitsField.getText()).matches()){
        throw new NumberFormatException("Not a double");
    }
    double itemVolume = Double.parseDouble(NumOfUnitsField.getText());
} catch (NumberFormatException exception) {
    SetErrorField("Input must be the appropriate type (real number for volume, integer for units)");
}

答案 1 :(得分:1)

Double.parseDouble()将很乐意接受整数值,因此您应该尝试使用正则表达式。这将检查您在小数点之前和之后至少有1位数字:

Pattern p = Pattern.compile("\\d+\\.\\d+");
boolean isDecimalValue = p.matcher(NumOfUnitsField.getText()).matches();