2009-03-14 23 views
26

Saludos,¿Cómo puedo saber si un entero Java es nulo?

Estoy tratando de validar si mi número entero es nulo. Si es así, necesito pedirle al usuario que ingrese un valor. Mi formación es Perl, así que mi primer intento se ve así:

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

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

Esto no funciona, ya que Java está a la espera de lógica booleana.

En Perl, puedo usar "existe" para comprobar si los elementos de hash/matriz contienen los datos con:

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

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

¿Hay una manera de esto en Java? ¡Gracias por tu ayuda!

Jeremiah

P.S. Perl exists información.

+0

¿De verdad se trata de dos preguntas separadas? ¿Cómo tiene que ver el uso de un contenedor con el primer ejemplo? –

Respuesta

41

parseInt() va a lanzar una excepción si el análisis no se puede completar con éxito. En su lugar, puede usar Integers, el tipo de objeto correspondiente, que hace las cosas un poco más limpias. Así que es probable que desee algo más cercano a:

Integer s = null; 

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

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

Cuidado si decide utilizar parseInt()! parseInt() no soporta bien la internacionalización, así que hay que saltar a través de aros aún más:

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. 
} 
+11

No te encanta un lenguaje que te hace atrapar tantas excepciones solo para que puedas ignorarlas :) – mpeters

+1

Francamente, prefiero ser forzado a atrapar la excepción en lugar de dejarla ahí sin ser detectada y cuando mi pila se vuelve enorme Tengo que encontrar donde fui idiota hace mucho tiempo. Solo es mi opinión. – Android334

3

int s son tipos de valor; nunca pueden ser null. En cambio, si el análisis falló, parseInt lanzará un NumberFormatException que debe atrapar.

8

Prueba esto:

Integer startIn = null; 

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

if (startIn == null) { 
    // Prompt for value... 
} 
0

no creo que se puede utilizar "existe" en un entero en Perl, sólo en colecciones. ¿Puedes dar un ejemplo de lo que quieres decir en Perl que coincide con tu ejemplo en Java?

Dada una expresión que especifica un elemento de hash o elemento de la matriz, devuelve verdadero si el elemento especificado en el hash o matriz nunca se ha inicializado, incluso si el valor correspondiente es indefinido.

Esto indica que solo se aplica a elementos hash o de matriz.

+0

Estoy bastante de acuerdo. En mi ejemplo de Perl, utilicé una matriz y luego utilicé exists para verificar si un elemento en la matriz tiene contenido. Gracias por la respuesta. –

2

No hay exists por un escalar en Perl, de todos modos. La forma en que Perl es

defined($x) 

y el equivalente Java es

anInteger != null 

Esos son los equivalentes.

exists $hash{key} 

es como el de Java

map.containsKey("key") 

de su ejemplo, pienso que usted está buscando

si (Startin! = Null) {...

2

Para mí solo usar el método Integer.toString() funciona bien para mí. Puedes convertirlo si lo deseas muy bien si es nulo. Ejemplo a continuación:

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) 
0

Esto debería ayudar.

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

(Demasiado agregar el código fuente, tiene que sangrarlo con 4 espacios o una sola pestaña). – kay

+0

@Kay: ¿espacios o pestaña? esa es la pregunta: P –

Cuestiones relacionadas