Conceptos básicos de Java: cláusulas de objeto y if

Tengo un problema muy básico con un objeto.

Creo el objeto en una instrucción if() en mi método principal. (hay un else, por lo que siempre se creará).

El objeto tiene un método de impresión (), que funciona bien, pero cuando coloco myobject.print () fuera de las cláusulas if () donde se creó, aparece un error: "no se puede encontrar el símbolo".

Supongo que estoy cometiendo un error tonto de principiante, pero myobject.print() dentro de las cláusulas if() funcionará bien, así que mi pregunta es, ¿qué le está pasando a mi objeto? (El método principal no hace nada más en el medio...)

  else default to 20, 10, and fill randomly 1/4
  {
    int a = 20;
    int b = 10;
    Table myTable = new Table(a,b);
    myTable.randomfill(Math.round((a*b)/4)); //round in case defaults change later
    System.out.println("Printing Table .... ");
    myTable.print();  <-- here it works
  }

  //always print !!
  System.out.println("Printing Table .... ");
  myTable.print(); <-- won't work

preguntado el 10 de marzo de 12 a las 14:03

4 Respuestas

Lo que dijeron los demás. Si tienes lo siguiente:

if (x == y) {
    MyObject obj = new MyObject();
}

Entonces obj no se definirá una vez que salga de la {} de la if.

Para hacer que el objeto sea accesible "afuera", harías:

MyObject obj = null;
if (x == y) {
    obj = new MyObject();
}

(Tenga en cuenta que NO "declara" obj dentro de {} -- dejas fuera el líder MyObject.)

respondido 10 mar '12, 14:03

myTable tiene como alcance solo el bloque else. No es visible después de completar el bloque else. Si desea acceder a ella fuera del bloque else, puede definir myTable fuera del bloque else y asignarle un objeto dentro del bloque else.

Table myTable =null;
else default to 20, 10, and fill randomly 1/4 
  { 
    int a = 20; 
    int b = 10; 
    myTable = new Table(a,b); 
    myTable.randomfill(Math.round((a*b)/4)); //round in case defaults change later 
    System.out.println("Printing Table .... "); 
    myTable.print();  <-- here it works 
  } 

  //always print !! 
  System.out.println("Printing Table .... "); 
if(myTable != null){  //Make sure myTable is not null.
  myTable.print(); <-- won't work 
}

respondido 10 mar '12, 14:03

Una variable local como myTable tiene alcance (solo es visible) dentro del bloque del código donde la declaras. El bloque de código es el conjunto más interno de corchetes, por lo que myTable solo se puede usar hasta el final del bloque else.

Si desea que esté visible después del bloque else, deberá retrasarlo antes de if. Algo como:

Table myTable = new Table(a,b);
if (some condition) {
    // code removed
} else default to 20, 10, and fill randomly 1/4 {
    // code removed
}
// myTable now visible here and until the end of this block

respondido 10 mar '12, 14:03

Lea sobre el alcance de variables y bloques; el problema es que declaraste tu variable dentro de un bloque e intentas referirla fuera de ese bloque, haciéndola fuera del alcance y, por lo tanto, no reconocida.

respondido 10 mar '12, 14:03

esto es un comentario, no una respuesta. - Juvanis

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