2017-08-25 2 views
1

Bon, donc, ce que j'ai, c'est censé être un simple rouleau de dés. 2 champs de texte, un pour le nombre de dé que vous voulez lancer, et l'autre pour le total. (Eh bien, et un troisième pour chaque dé individuel roulé, mais c'est à côté du point) Cela fonctionne bien, tant que le nombre de champ de texte die n'est pas vide. Lorsque le champ est vide, je viens d'obtenir un NumberFormatExceptionVérifier le champ de texte vide

Mon code:

 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)); 
     } 
    }); 

J'ai essayé de vérifier la valeur de d4_text de différentes façons, chacun soit donner une erreur parce que je ne peux pas vérifier pour null, ou une chaîne, ou autre.

Répondre

1

Pour vérifier en toute sécurité pour « si le champ contient une valeur entière », vous pouvez effectuer les opérations suivantes:

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' 
} 

Vous vérifiez que le champ contient une chaîne non nulle qui ne se compose que de chiffres, au moins un.

Il est toujours possible qu'un utilisateur casse cet entrée trop long pour int; vous pouvez également ajouter une certaine restriction raisonnable sur la longueur de la valeur de champ:

if (fieldValue != null && fieldValue.matches("\\d{2}")) { 

Ici, seuls les nombres composés exactement de 2 chiffres seront acceptés.

+0

Hey, merci pour ça! Fondamentalement exactement ce que j'essayais de faire, mais je ne savais pas comment. – hego64

0

Vous pouvez prendre cette exception, et le mettre à zéro en cas de NumberFormatException

int d4_num; 

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

Essayez cette passe avant la valeur entière

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

J'ai essayé de vérifier la valeur de d4_text de différentes façons, chacun soit donner une erreur parce que je ne peux pas vérifier null, ou une chaîne, ou quoi que.

d'abord: vérifier que le champ n'est pas null (Notez que par défaut Java textfields d'entrée FX ne sont pas nulles, mais un code client difficile peut changer) et non vide (en coupant les espaces blancs).
Deuxièmement: vérifiez que c'est un nombre ou attrapez l'exception. L'utilisation d'un Integer plutôt que int aide à déterminer si la valeur soumise est Integer. Integer qui accepte la valeur null peut transmettre une entrée défaillante mais int qui est nécessaire évalué avec une valeur numérique ne peut pas.

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 
    } 
} 

Vous pouvez également utiliser apache-common-lang pour le faire:

String textToConvertToInt = d4_text.getText(); 
Integer d4_num = null; 
if (NumberUtils.isNumber(textToConvertToInt)){ 
    d4_num = Integer.parseInt(textToConvertToInt); 
}