我有一个模拟加油站的GUI程序。
在程序中,有3个输入字段:
然后,您可以选择按卷或按单位添加项目。我们的想法是,你可以用最少的输入盒购买燃料和其他物品(如食物)。
我使用异常处理检查输入是我想要的:
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)");
}
如果有人能指出我正确的方向解决这个问题,那就太好了。
谢谢
答案 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();