2017-08-25 119 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); 
}