好吧,所以,我拥有的,应该是一个简单的骰子滚筒。 2个文本字段,一个用于您想要滚动的模具数量,另一个用于总计。 (好吧,每个人掷骰子的三分之一,但除此之外)这个工作正常,只要骰子文本字段的数量不为空。当该字段为空时,我只获得NumberFormatException
我的代码:
Button d4 = new Button("d4 ");
d4.setLayoutX(240);
d4.setLayoutY(90);
d4.addEventHandler(ActionEvent.ACTION, new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
tooltip.setText("");
int d4_num = Integer.parseInt(d4_text.getText()); //d4_text is for the number of die
d4_num = d4_num + 1;
int sum = 0;
for (int i = 1; i < d4_num; i++){
int result = 1 + (int)(Math.random() *4);
sum = sum += result;
tooltip.appendText((String.valueOf("d4_" + i + " =" + result + "\n")));
}
d4_result.setText(String.valueOf(sum));
}
});
我尝试以不同的方式检查d4_text
的值,每个都给出错误,因为我无法检查null,或字符串,或其他什么。
答案 0 :(得分:1)
要安全地检查&#39;该字段是否包含整数值&#39;你可以做到以下几点:
final String fieldValue = d4_text.getText();
if (fieldValue != null && fieldValue.matches("\\d+")) {
int d4_num = Integer.parseInt(fieldValue);
... the rest of your logic that relies on having a correct d4_num value
} else {
... output some error message like 'please enter a few digits'
}
在此检查该字段是否包含非空字符串,该字符串仅由数字组成,至少包含一个数字。
对于int
,用户可能会破坏此输入的数字太长;您还可以对字段值长度添加一些合理的限制:
if (fieldValue != null && fieldValue.matches("\\d{2}")) {
此处,只接受由2位数字组成的数字。
答案 1 :(得分:0)
您可以捕获该异常,并在NumberFormatException
int d4_num;
try {
d4_num = Integer.parseInt(d4_text.getText());
} catch (NumberFormatException e) {
d4_num = 0;
}
答案 2 :(得分:0)
在传递整数值
之前尝试此操作if (d4_text.getText() == null || d4_text.getText().trim().isEmpty()) {
// your code here }
答案 3 :(得分:0)
我尝试过以不同的方式检查d4_text的值 要么出错,因为我无法检查null,还是字符串,或者 不管。
首先:检查该字段是否为null
(请注意,默认情况下,Java FX输入文本字段不为空,但棘手的客户端代码可能会更改它)并且不为空(通过修剪空格)。
第二:检查它是一个数字还是捕获异常。
使用Integer
而不是int
有助于确定提交的值是否为Integer
。接受Integer
值的null
可能会传达失败的输入,但int
必须使用数值进行估算。
Integer d4_num = null;
String textToConvertToInt = d4_text.getText();
if (textToConvertToInt != null && !textToConvertToInt.trim().equals("")){
try{
d4_num = Integer.parseInt(textToConvertToInt);
}
catch (NumberFormatException e){
// handle the exception
}
}
您也可以使用apache-common-lang来执行此操作:
String textToConvertToInt = d4_text.getText();
Integer d4_num = null;
if (NumberUtils.isNumber(textToConvertToInt)){
d4_num = Integer.parseInt(textToConvertToInt );
}