web-dev-qa-db-fra.com

Comment savoir si un entier Java est nul?

Salutations,

J'essaie de valider si mon entier est nul. Si c'est le cas, je dois demander à l'utilisateur d'entrer une valeur. Mon fond est Perl, donc ma première tentative ressemble à ceci:

int startIn = Integer.parseInt (startField.getText());

if (startIn) { 
    JOptionPane.showMessageDialog(null,
         "You must enter a number between 0-16.","Input Error",
         JOptionPane.ERROR_MESSAGE);                
}

Cela ne fonctionne pas, car Java attend une logique booléenne. 

En Perl, je peux utiliser "existe" pour vérifier si les éléments de hachage/tableau contiennent des données avec:

@items = ("one", "two", "three");
#@items = ();

if (exists($items[0])) {
    print "Something in \@items.\n";
}
else {
    print "Nothing in \@items!\n";
}

Y a-t-il un moyen de le faire en Java? Merci de votre aide!

Jérémie

P.S. Perl existe info.

26
Jeremiah Burley

parseInt() va simplement lancer une exception si l'analyse ne peut pas être complétée avec succès. Vous pouvez plutôt utiliser Integers, le type d'objet correspondant, ce qui rend les choses un peu plus propres. Donc, vous voulez probablement quelque chose de plus proche de:

Integer s = null;

try { 
  s = Integer.valueOf(startField.getText());
}
catch (NumberFormatException e) {
  // ...
}

if (s != null) { ... }

Attention si vous décidez d'utiliser parseInt()! parseInt() ne supporte pas une bonne internationalisation, vous devez donc franchir encore plus de défis:

try {
    NumberFormat nf = NumberFormat.getIntegerInstance(locale);
    nf.setParseIntegerOnly(true);
    nf.setMaximumIntegerDigits(9); // Or whatever you'd like to max out at.

    // Start parsing from the beginning.
    ParsePosition p = new ParsePosition(0);

    int val = format.parse(str, p).intValue();
    if (p.getIndex() != str.length()) {
        // There's some stuff after all the digits are done being processed.
    }

    // Work with the processed value here.
} catch (Java.text.ParseFormatException exc) {
    // Something blew up in the parsing.
}
41
John Feminella

Essaye ça:

Integer startIn = null;

try {
  startIn = Integer.valueOf(startField.getText());
} catch (NumberFormatException e) {
  .
  .
  .
}

if (startIn == null) {
  // Prompt for value...
}
8
John Topley

ints sont des types de valeur; ils ne peuvent jamais être null. Au lieu de cela, si l'analyse échoue, parseInt lancera une NumberFormatException à attraper.

3
Thomas

Il n'y a pas de exists pour un SCALAIRE en Perl, de toute façon. Le chemin Perl est 

defined( $x ) 

et l'équivalent Java est 

anInteger != null

Ce sont les équivalents. 

exists $hash{key}

Est comme le java

map.containsKey( "key" )

De votre exemple, je pense que vous cherchez 

if (startIn! = null) {...

2
Axeman

Pour moi, utiliser simplement la méthode Integer.toString () me convient parfaitement. Vous pouvez le convertir si vous voulez juste si tout est nul. Exemple ci-dessous:

private void setCarColor(int redIn, int blueIn, int greenIn)
{
//Integer s = null;
if (Integer.toString(redIn) == null || Integer.toString(blueIn) == null ||     Integer.toString(greenIn) == null )
2
SaintClaire33

Cela devrait aider.

Integer startIn = null;

// (optional below but a good practice, to prevent errors.)
boolean dontContinue = false;
try {
  Integer.parseInt (startField.getText());
} catch (NumberFormatException e){
  e.printStackTrace();
}

// in Java = assigns a boolean in if statements oddly.
// Thus double equal must be used. So if startIn is null, display the message
if (startIn == null) {
  JOptionPane.showMessageDialog(null,
       "You must enter a number between 0-16.","Input Error",
       JOptionPane.ERROR_MESSAGE);                            
}

// (again optional)
if (dontContinue == true) {
  //Do-some-error-fix
}
0
John Schneider

Je ne pense pas que vous puissiez utiliser "existe" sur un entier en Perl, mais uniquement sur des collections. Pouvez-vous donner un exemple de ce que vous voulez dire en Perl et qui correspond à votre exemple en Java?.

Étant donné une expression qui spécifie un élément de hachage ou un élément de tableau, renvoie true si l'élément spécifié dans le hachage ou le tableau a déjà été initialisé, même si la valeur correspondante n'est pas définie.

Cela indique que cela ne s'applique qu'aux éléments de hachage ou de tableau!

0
Peter Lawrey