2017-08-25 158 views
1

好吧,我拥有的应该是一个简单的骰子滚轮。 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方式不同的价值,每个人要么给出一个错误,因为我无法检查为空,或一个字符串,或其他。

回答

1

要安全检查“的字段是否包含一个整数值”你可以做到以下几点:

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位数字组成的数字。

+0

嘿,感谢这个!基本上正是我想要做的,但我不知道如何。 – hego64

0

您可以捕获该异常,并在NumberFormatException

int d4_num; 

try { 
    d4_num = Integer.parseInt(d4_text.getText()); 
} catch (NumberFormatException e) { 
    d4_num = 0; 
} 
0

的情况下设置为零尝试此之前通过整数值

if (d4_text.getText() == null || d4_text.getText().trim().isEmpty()) { 
// your code here } 
0

我已经试过检查的价值d4_text以不同的方式,每一个 或者给出一个错误,因为我无法检查空或字符串或 什么。

首先:检查该字段是不是null(请注意,默认的Java FX输入文本框不为空,但一个棘手的客户端代码可能会改变它),而不是空的(通过调整空格)。
其次:检查它是一个数字还是捕捉异常。使用Integer而不是int有助于确定提交的值是否为IntegerInteger接受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); 
}