Error: es posible que la variable no se haya inicializado

Estoy haciendo un ejercicio de libro sobre la función de Ackermann.

Aunque tengo una pregunta. Si declaro el resultado pero no lo inicializo, el compilador se queja de que "es posible que el resultado de la variable no se haya inicializado".

int result;

Cuando lo configuro por defecto en 0, no se queja.

int result = 0;

Pensé que cuando uno declara una variable con el tipo int, el valor predeterminado es 0 automáticamente.

Aquí está el código completo:

public class Ackermann {
   public static int ack(int m, int n) {
     int result = 0;
     //int result;
     if (m == 0)
        result = n + 1;
     else if(m > 0 && n == 0)
        result = ack(m-1, 1); 
     else if(m > 0 && n > 0)
        result = ack(m-1, ack(m, n-1));
     return result;
   }   

   public static void main(String[] args) {
      System.out.println(ack(3, 3));  
   }   

}

preguntado el 27 de agosto de 11 a las 17:08

3 Respuestas

Las variables locales no se inicializan con valores predeterminados. Ver el especificaciones de idioma por la verdad fundamental.

Respondido 27 ago 11, 21:08

Es una muy mala práctica no inicializar las variables. Hay un chiste popular que se adapta a tu caso: John obtuvo 3 manzanas de su madre y 5 de su padre. ¿Cuántas manzanas tiene John? Si no eres buen programador, tu respuesta será 8. Si eres buen programador, responderás que no sabemos cuántas manzanas había tenido Juan antes de obtener manzanas de su Madre. Recuerde: inicialice siempre las variables y no asuma que serán 0.

Respondido 27 ago 11, 21:08

Parece estar insinuando que una variable int no inicializada podría tener un valor distinto de 0. Eso es falso (en Java de todos modos). Una variable miembro que no se ha inicializado explícitamente siempre tendrá el valor 0 y no inicializar una variable local simplemente causa un error de compilación como lo notó el OP. Por lo tanto, no es una mala práctica no inicializar los locales, es un error del compilador. Y podría ser una mala práctica no inicializar miembros, pero eso es puramente un problema de legibilidad y no tiene nada que ver con que la variable posiblemente no sea 0. - sepp2k

Los campos de las clases tienen valores predeterminados (nulo, 0, falso, etc.). Las variables locales, sin embargo, no lo hacen, debe definirlas explícitamente. Mucha gente incluso no está de acuerdo con no configurar campos explícitamente, porque configurarlo le muestra al lector que realmente ha pensado en configurarlo en un valor en lugar de simplemente olvidarse de configurarlo, por lo tanto, podría causar un error en algún lugar en el futuro.

Respondido 27 ago 11, 21:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.