Llamar objetos desde un switch

Iniciado por brianchatran, 4 Octubre 2018, 01:32 AM

0 Miembros y 1 Visitante están viendo este tema.

brianchatran

Buenas, tengo una duda, en java se que se pueden crear objetos los cuales pueden contener variables o texto a imprimir, y tambien se que se pueden crear menus con "Switch", ahora mi duda es si puedo llamar a un objeto mediante switch,
Ej:

switch (op) {
case 1 :
              Prueba.opcion1 ();



Al hacer esto me da error en java, y no se como poder hacerlo, se aceptan ideas, desde ya muchas gracias!

PD: El objeto "opcion1" ya esta creado desde antes que el switch , y aunque lo cree despues igualmente me da error.

3n31ch

Hola amigo. Primero decir que uses las etiquetas GeShi apropiadas (Java) para que tu código sea mas legible y podamos responderte mas rápido.

Respecto a tu pregunta... No hay ningún problema con usar la instancia de una clase (objeto) dentro de la estructura switch y case:

Código (java) [Seleccionar]
MyObject myObject = new MyObject();
       int option = 1;
       switch(option) {
           case 1:
               myObject.myMethod();
           break;
           case 2:
               myObject.myAnotherMethod();
           default:
               myObject.myDefaultMethod();
       }


Seguramente tu error este en que no instanciaste el objeto Prueba.

Si pones el error que te aparece te podre ayudar mejor. Suerte!

Pd: option1 no es un objeto, es el método de dicho objeto.

MrSimpatia

Hola 3n31ch, la duda en realidad era mia no la podia hacer yo porque no me dejaba crear la cuenta, ahora que si me dejo te explico el codigo es este
import java.util.Scanner;
public class TestDelObligatorioV2 {

public static void main (String []args) {
TestDelObligatorioV2 Prueba = new TestDelObligatorioV2 ();
Prueba.iniciar();
Prueba.op1 ();
}
public Scanner dato;
int num, list;
int datos [];
String nombre [] = new String [0];
String apellido [] = new String [0];
String telefono [] = new String [0];

public static iniciar (){
int n;
dato=new Scanner (System.in);
System.out.println("Bienvenido!...");
System.out.println("1- Ingreso de datos");
System.out.println("2- Listado de datos");
System.out.println("3- Buscar por nombre");
System.out.println("4- Buscar por telefono");

do {
System.out.print("Opcion: ");
n = dato.nextInt();
switch (n) {
case 1 :
//Aca quiero llamar a op1
Prueba.op1();
}


}while  (n!= 0 && n<5);



} //Aca se van a cargar los datos y crear los vectores
public void op1 () {
System.out.print("Cuantos datos se ingresaran? ");
num = dato.nextInt();
datos = new int [num];
nombre = new String [num];
apellido = new String [num];
telefono = new String [num];
dato.nextLine();
for (int i=0; i<num; i++) {
System.out.print("Ingrese nombre: ");
nombre [i] = dato.nextLine();
System.out.print("Ingrese apellido: ");
apellido [i] = dato.nextLine();
System.out.print("Ingrese telefono: ");
telefono [i] = dato.nextLine();
}
} //Aca se van a mostrar los datos de los vectores
public void op2 () {
System.out.println("Cuantos datos quiere ver? ");
list = dato.nextInt();
System.out.println("Listado de datos:");
System.out.println("--------------------------");
for (int i=0; i<list; i++) {
System.out.println(apellido+" "+nombre+" - "+telefono);

}
}


}


Cuando quiero llamar con el switch a op1 no me deja me dice que no existe el metodo, si sabes como solucionarlo te estoy eternamente agradecido!
Ah y disculpa si confundo metodo con objetos soy medio nuevo en esto

3n31ch

#3
Vale, tienes muchos errores:

1. El método iniciar esta haciendo uso de el atributo "dato", el cual no es estático, sin embargo el método si lo es. No puedes usar un elemento no estático dentro de un estático.

Código (java) [Seleccionar]
public static Scanner dato;

2. El método iniciar no indica cual es su retorno:
Código (java) [Seleccionar]
public static iniciar() {} // ESTO ESTA MAL
public static void iniciar() {} // ESTE ESTA BIEN. FALTA EL VOID PARA DECIR QUE NO RETORNA NADA.


3. Estas usando el Objeto prueba dentro del método iniciar. No puedes hacer eso a menos que dicho objeto sea estático (que no lo es),  se cree dentro del método en cuestión o lo pases como parámetro al método iniciar. Tu creaste Prueba dentro de main, por tanto, para el método iniciar(), este no existe.

Código (java) [Seleccionar]
public static void iniciar (TestDelObligatorioV2 Prueba){ // así lo pasas como parámetro

Prueba.iniciar(Prueba); // así lo usas


4. Los nombres de atributos y variables no deben partir en mayúscula (Aunque este sea un error menor... ten cuidado, es como que te apestara la boca al hablar con alguien)

5. Hay otros errores como el encapsulado de datos, el orden de tu código, la no documentación entre otros... pero teniendo en cuenta que estas aprendiendo no te preocupes por los errores 4 o 5 :)

rub'n

#4
tal cual como te dice 3n31ch , añadiendo tambien que uses modificadores de acceso como private por convencion también de esta manera puedes hacerlo


Código (java) [Seleccionar]

package foro;

import java.util.Scanner;

public class TestDelObligatorioV2 {

   private Scanner dato;
   private int num, list;
   private int datos[];
   private String nombre[] = new String[0];
   private String apellido[] = new String[0];
   private String telefono[] = new String[0];

   public TestDelObligatorioV2() {

   }

   public void iniciar() {
       int n;
       dato = new Scanner(System.in);
       System.out.println("Bienvenido!...");
       System.out.println("1- Ingreso de datos");
       System.out.println("2- Listado de datos");
       System.out.println("3- Buscar por nombre");
       System.out.println("4- Buscar por telefono");

       do {
           System.out.print("Opcion: ");
           n = dato.nextInt();
           switch (n) {
               case 1:
                   //Aca quiero llamar a op1
                   op1();
                   break;
               case 2 :
                   op2();
                   break;
           }


       } while (n != 0 && n < 5);


   } //Aca se van a cargar los datos y crear los vectores


   public void op1() {
       System.out.print("Cuantos datos se ingresaran? ");
       num = dato.nextInt();
       datos = new int[num];
       nombre = new String[num];
       apellido = new String[num];
       telefono = new String[num];
       dato.nextLine();
       for (int i = 0; i < num; i++) {
           System.out.print("Ingrese nombre: ");
           nombre[i] = dato.nextLine();
           System.out.print("Ingrese apellido: ");
           apellido[i] = dato.nextLine();
           System.out.print("Ingrese telefono: ");
           telefono[i] = dato.nextLine();
       }
   } //Aca se van a mostrar los datos de los vectores

   public void op2() {
       System.out.println("Cuantos datos quiere ver? ");
       list = dato.nextInt();
       System.out.println("Listado de datos:");
       System.out.println("--------------------------");
       for (int i = 0; i < list; i++) {
           System.out.println(apellido[i] + " " + nombre[i] + " - " + telefono[i]);

       }
   }

   public static void main(String[] args) {
       TestDelObligatorioV2 prueba = new TestDelObligatorioV2();
       prueba.iniciar();
       prueba.op1();
       prueba.op2();
   }

}


El metodo op2() usa el array que previamente has llenado linea 7 puedes ver la diferencia, con ese accedes a cada index de tu array
Código (java) [Seleccionar]
public void op2() {
       System.out.println("Cuantos datos quiere ver? ");
       list = dato.nextInt();
       System.out.println("Listado de datos:");
       System.out.println("--------------------------");
       for (int i = 0; i < list; i++) {
           System.out.println(apellido[i] + " " + nombre[i] + " - " + telefono[i]);
       }
   }


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

3n31ch

Cita de: perepillo en  5 Octubre 2018, 00:44 AM
si sabes como solucionarlo te estoy eternamente agradecido!

Conste que yo conteste primero, así que te quedas eternamente agradecido de mi, no del usurpador de respuestas "rub'n".. (dicen que el mastica con la boca abierta).

PD: rub'n, uno que se esfuerza por no ponerle el código completo y no hacerle la tarea... y tu llegas y lo arregas, hahahaha

rub'n

Cita de: 3n31ch en  5 Octubre 2018, 01:27 AM
Conste que yo conteste primero, así que te quedas eternamente agradecido de mi, no del usurpador de respuestas "rub'n".. (dicen que el mastica con la boca abierta).

PD: rub'n, uno que se esfuerza por no ponerle el código completo y no hacerle la tarea... y tu llegas y lo arregas, hahahaha

Ni te creeas que quiero discutir  :xD


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

MrSimpatia

Jajaja muchas gracias a los dos, y tiene razon 3n31ch eso de pasarme la tarea completa es hacer trampa, pero en serio mil gracias, me tenia muy mal no saber como tenia que hacer, estoy preparando mi proyecto final de curso y ese error me tenia muy mal