Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Finishim en 30 Abril 2015, 03:58 am



Título: Invocar metodos desde switch
Publicado por: Finishim en 30 Abril 2015, 03:58 am
Estimados, tengo una duda:

 Tengo una estructura de control como switch con varias opciones, en donde la opcion 1 me permite guardar datos enteros y de tipo String, y que en la opción 2 del menú permita mostrar esos guardados en el case 1

ej: menu
      "1) ingresar datos"
      "2) mostrar datos"

para ingresar datos en el case 1 tengo el siguiente codigo:

Código
  1.   Scanner lector=new Scanner(System.in);
  2.        Persona persona=new Persona();
  3. switch(op){
  4.  
  5.  
  6.            case 1:   System.out.println("Ingrese nombre");
  7.                      String nombre=lector.nextLine();
  8.                      persona.setNombre(nombre);
  9.  
  10.                      System.out.println("Ingrese edad");
  11.                      int edad=lector.nextInt();
  12.                      persona.setEdad(edad)
  13.                      break;

 y para mostrar tengo lo siguiente:
Código
  1.   case 2:    System.out.println("edad:"+persona.getEdad());
  2.              System.out.println("nombre:"+persona.getNombreCompleto());
  3.                      break;
  4.  

Cuando quiero mostrar los datos, este solo me imprime los campos edad y nombre, pero no el contenido que supuestamente he guardado en el case 1, eso me hace pensar que debo tener un error en las llamadas, o esta mal implementada las llamadas ?

el codigo de la clase:
Código
  1.  
  2. public Persona ()
  3.  
  4.    {
  5.        nombre= "";
  6.        edad=0;
  7.    }
  8.  
  9.    public Persona (String nombre, int edad)
  10.    {
  11.        this.nombre=nombre;
  12.        this.edad = edad;
  13.    }
  14.  
  15. public void setNombre(String nombre)
  16.    {
  17.       this.nombre=nombre;
  18.    }
  19.  
  20.    public void setEdad(int edad)
  21.    {
  22.       this.edad = edad;
  23.    }
  24.  
  25. public String getNombre()
  26.    {
  27.        return nombre;
  28.    }
  29.  
  30.    public int getEdad()
  31.    {
  32.        return edad;
  33.    }

agradecería cualquier orientación a alguna posible solución


Título: Re: Invocar metodos desde switch
Publicado por: PabloPbl en 30 Abril 2015, 04:08 am
Intenta hacerlo de esta forma, en el case 1:
Código
  1. case 1:   System.out.println("Ingrese nombre");
  2.     String nombre=lector.nextLine();
  3.     persona.setNombre(nombre);
  4.  
  5.     System.out.println("Ingrese edad");
  6.     int edad=Integer.parseInt(lector.nextLine());
  7.     persona.setEdad(edad)
  8.     break;
  9.  


Título: Re: Invocar metodos desde switch
Publicado por: PabloPbl en 30 Abril 2015, 04:13 am
Creo que entendí mal tu pregunta,

No veo ningún método llamado
Código:
getNombreCompleto()
en la clase Persona, quizás si intentas con
Código:
getNombre()
debería funcionar.

PD: Quizás si muestras un poco mas tu code podría ayudarte.


Título: Re: Invocar metodos desde switch
Publicado por: Finishim en 30 Abril 2015, 19:14 pm
Aqui tengo el code con mas detalles:

Código
  1. do{
  2.        System.out.println("---M E N U---");
  3.        System.out.println("1) Ingesa datos");
  4.        System.out.println("2) Mostrar datos");
  5.        System.out.println("3) Salir");
  6.        op = lector.nextInt();
  7.        System.out.flush();
  8.        Scanner lector=new Scanner(System.in);
  9.        Persona persona=new Persona();
  10.  
  11.          switch(op){
  12.  
  13.            case 1:   System.out.println("Ingrese nombre");
  14.                      String nombre=lector.nextLine(); // aqui deberia guardar el dato
  15.                      persona.setNombre(nombre);  // y aqui pasarselo al metodo set para despues ser mostrado, o no?
  16.  
  17.                      System.out.println("Ingrese edad");
  18.                      int edad=lector.nextInt();  // guardamos
  19.                      persona.setEdad(edad);   // pasamos a setEdad
  20.                      break;
  21.  
  22.  
  23.  
  24.           case 2:    System.out.println("edad:"persona.getEdad());
  25.                      System.out.println("nombre:"persona.getNombre());
  26.                      break;
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.                }
  34.      }  while(op<=3);

En el case 2 supuestamente  deberia llamar a los metodos get para mostrar la info pero no lo hace  y solo muestra los campos edad y nombre imprimidos en el systemout.prinltn, y no muestra nada

Y la clase:

Código
  1. public class Persona
  2. {
  3.    private String nombre;
  4.    private int edad;
  5.  
  6.    public Persona ()
  7.  
  8.    {
  9.        nombre= "";
  10.        edad=0;
  11.    }
  12.  
  13.    public Persona (String nombre, int edad)
  14.    {
  15.        this.nombre=nombre;
  16.        this.edad = edad;
  17.    }
  18.  
  19.    public void setNombre(String nombre)
  20.    {
  21.        this.nombre=nombre;
  22.    }
  23.  
  24.    public void setEdad(int edad)
  25.    {
  26.       this.edad = edad;
  27.    }
  28.  
  29.    public String getNombre()
  30.    {
  31.        return nombre;
  32.    }
  33.  
  34.    public int getEdad()
  35.    {
  36.        return edad;
  37.    }
  38. }
  39.  


Título: Re: Invocar metodos desde switch
Publicado por: PabloPbl en 30 Abril 2015, 19:22 pm
En el case 2 intenta poniendo esto:

Código
  1. case 2:    System.out.println("edad:"+persona.getEdad());
  2.                      System.out.println("nombre:"+persona.getNombre());
  3.                      break;
  4.  

Seguro, que estas haciéndolo como estoy creyendo, puedes mostrar la clase completa? please


Título: Re: Invocar metodos desde switch
Publicado por: Finishim en 30 Abril 2015, 19:53 pm
En el case 2 intenta poniendo esto:

Código
  1. case 2:    System.out.println("edad:"+persona.getEdad());
  2.                      System.out.println("nombre:"+persona.getNombre());
  3.                      break;
  4.  

Seguro, que estas haciéndolo como estoy creyendo, puedes mostrar la clase completa? please

pablo, asi mismo como dices lo tengo en el case 2, ahora modifique el post de arriba que lo tenía como cltNuevo, que era de otro codigo. Lo tenia como dices pero no anda, que clase quieres que muestre ? la del void main ?? por que la clase persona es todo lo que hay alli

Código
  1. import java.util.Scanner;
  2. public class interfaz
  3. {
  4.    private static Scanner lector=new Scanner(System.in);
  5.  
  6.    public static void main ()
  7.    {
  8.        int op=0; int i=0;
  9. do{
  10.        System.out.println("---M E N U---");
  11.        System.out.println("1) Ingesa datos");
  12.        System.out.println("2) Mostrar datos");
  13.        System.out.println("3) Salir");
  14.        op = lector.nextInt();
  15.        System.out.flush();
  16.        Scanner lector=new Scanner(System.in);
  17.        Persona persona=new Persona();
  18.  
  19.          switch(op){
  20.  
  21.            case 1:   System.out.println("Ingrese nombre");
  22.                      String nombre=lector.nextLine(); // aqui deberia guardar el dato
  23.                      persona.setNombre(nombre);  // y aqui pasarselo al metodo set para despues ser mostrado, o no?
  24.  
  25.                      System.out.println("Ingrese edad");
  26.                      int edad=lector.nextInt();  // guardamos
  27.                      persona.setEdad(edad);   // pasamos a setEdad
  28.                      break;
  29.  
  30.  
  31.  
  32.           case 2:    System.out.println("edad:"persona.getEdad());
  33.                      System.out.println("nombre:"persona.getNombre());
  34.                      break;
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.                }
  42.      }  while(op<=3);
  43. }
  44. }


Título: Re: Invocar metodos desde switch
Publicado por: PabloPbl en 30 Abril 2015, 20:49 pm
No pongas el objeto persona que creas dentro del ciclo, por que si no cada vez que  ejecute el ciclo se creara un objeto nuevo.

Ponlo dentro del main, pero, no dentro del ciclo.

Saludos.