Java - cannot find symbol

 
Vista:
sin imagen de perfil
Val: 7
Ha aumentado su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

cannot find symbol

Publicado por Wilson (2 intervenciones) el 12/11/2018 19:05:08
Buenos dias,

intento que la informacion de la variable B del metodo Ingreso me aparezca en el metodoTiempo, pero me aparece el siguiente Error, "cannot find symbol". Agradezco me ayuden con este error, Muchas gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Puesto_Trabajo {
 
    public void Ingreso() {
 
        System.out.println("ingrese un nombre por favor");
        Scanner A = new Scanner(System.in);
        String B;
        B=A.nextLine();
        System.out.println("el Señor "+B+"viene por cambio de aceite");
 
    }
    public void Tiempo(){
        //Puesto_Trabajo F=new Puesto_Trabajo();
        System.out.println("ingrese el tiempo que demora el mantenimiento");
        int D;
        Scanner C = new Scanner(System.in);
        D=C.nextInt();
        System.out.println("Señor"+B+"el tiempo de trabajo es"+D);
 
    }
 
}


Error
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

cannot find symbol

Publicado por Kabuto (1381 intervenciones) el 12/11/2018 20:47:09
Hola tienes un problema de "alcance" (scope) para la variable B.

Tu la declaras aquí dentro, del método Ingreso():
1
2
3
4
5
6
7
8
9
public void Ingreso() {
 
    System.out.println("ingrese un nombre por favor");
    Scanner A = new Scanner(System.in);
    String B;
    B=A.nextLine();
    System.out.println("el Señor "+B+"viene por cambio de aceite");
 
}

Esto implica, que esa variable SOLO existe dentro de este método, no tiene "alcance" para ser vista por otros métodos o clases.
De hecho, lo cierto es que cuando el método Ingreso() termina de ejecutarse, esa variable B desaparece, es eliminada.
Así que ya no es solo que no tenga "alcance", si que no su "vida" se limita a lo que dure la ejecución del método Ingreso().

¿Como solucionamos esto?
Hay que ampliar su alcance. Y puesto que la variable B representa un elemento importante del programa y es problable que sean varios los métodos que necesiten acceder a ella, lo mejor es declararla como atributo de la clase principal Puesto_Trabajo.
Es decir, declararla antes de comenzar a definir los métodos.

Por cierto, lo mismo te va a pasar con la variable D. Si otro método quiere acceder a este valor, no va poder hacerlo.
Y aunque otros métodos no necesiten acceder a él, igualmente representa un dato importante dentro del propósito del programa, así que también merece ser declarada como atributo de la clase.

Y ya puestos, y esto es muy recomendable, evita usar nombres tan simples como A, B, C, D....
Las variables han de tener nombres descriptivos del valor que representan, ya no es solo cuestión de "buenas costumbres", es que es mucho más útil y se entiende mejor el programa.
Vale que este puede ser algo simple, pero normalmente un programa es más largo y complejo, y es mucho más cómodo trabajar con variables que con solo leer su nombre ya sepas cuál es su propósito, que no limitarse a las letras del abecedario...
Te puedes volver loco:
- ¿Cuál era la variable del nombre? ¿La A? Ah no espera, que A es un objeto Scanner..

Aquí te pongo donde y cómo deberían estar declaradas, para que sean accesibles a cualquier método, y con un nombre más acorde a su propósito dentro del programa.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Puesto_Trabajo {
 
    String nombreCliente = "";
     int tiempoDemora = 0;
 
    public void Ingreso() {
 
        System.out.println("ingrese un nombre por favor");
        Scanner A = new Scanner(System.in);
        nombreCliente = A.nextLine();
        System.out.println("el Señor " + nombreCliente +" viene por cambio de aceite");
 
    }
    public void Tiempo(){
        //Puesto_Trabajo F=new Puesto_Trabajo();
        System.out.println("ingrese el tiempo que demora el mantenimiento");
        Scanner C = new Scanner(System.in);
        tiempoDemora  = C.nextInt();
        System.out.println("Señor "+ nombreCliente +" el tiempo de trabajo es" + tiempoDemora );
 
    }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 7
Ha aumentado su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

cannot find symbol

Publicado por Wilson (2 intervenciones) el 13/11/2018 02:57:35
Muchas gracias Kabuto, ya aplique los cambios, y efectivamente funciona, pues se deben hacer las variables globales para que los demas metodos tengan alcance a ello, era un concepto que ya habia olvidado, ademas, tienes razon en cuanto a la seriedad de las variables, seguire su consejo.

Gracias y feliz noche.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar