elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Llamar objetos desde un switch
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Llamar objetos desde un switch  (Leído 5,664 veces)
brianchatran

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Llamar objetos desde un switch
« en: 4 Octubre 2018, 01:32 am »

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:

Código:
 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.


En línea

3n31ch


Desconectado Desconectado

Mensajes: 445


Grandes conocimientos engendran grandes dudas


Ver Perfil
Re: Llamar objetos desde un switch
« Respuesta #1 en: 4 Octubre 2018, 05:23 am »

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
  1. MyObject myObject = new MyObject();
  2.        int option = 1;
  3.        switch(option) {
  4.            case 1:
  5.                myObject.myMethod();
  6.            break;
  7.            case 2:
  8.                myObject.myAnotherMethod();
  9.            default:
  10.                myObject.myDefaultMethod();
  11.        }

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.


En línea

MrSimpatia

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: Llamar objetos desde un switch
« Respuesta #2 en: 5 Octubre 2018, 00:44 am »

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
Código:
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
En línea

3n31ch


Desconectado Desconectado

Mensajes: 445


Grandes conocimientos engendran grandes dudas


Ver Perfil
Re: Llamar objetos desde un switch
« Respuesta #3 en: 5 Octubre 2018, 00:59 am »

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
  1. public static Scanner dato;

2. El método iniciar no indica cual es su retorno:
Código
  1. public static iniciar() {} // ESTO ESTA MAL
  2. 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
  1. public static void iniciar (TestDelObligatorioV2 Prueba){ // así lo pasas como parámetro
  2.  
  3. Prueba.iniciar(Prueba); // así lo usas
  4.  

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 :)
« Última modificación: 5 Octubre 2018, 01:03 am por 3n31ch » En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Llamar objetos desde un switch
« Respuesta #4 en: 5 Octubre 2018, 01:17 am »

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
  1. package foro;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class TestDelObligatorioV2 {
  6.  
  7.    private Scanner dato;
  8.    private int num, list;
  9.    private int datos[];
  10.    private String nombre[] = new String[0];
  11.    private String apellido[] = new String[0];
  12.    private String telefono[] = new String[0];
  13.  
  14.    public TestDelObligatorioV2() {
  15.  
  16.    }
  17.  
  18.    public void iniciar() {
  19.        int n;
  20.        dato = new Scanner(System.in);
  21.        System.out.println("Bienvenido!...");
  22.        System.out.println("1- Ingreso de datos");
  23.        System.out.println("2- Listado de datos");
  24.        System.out.println("3- Buscar por nombre");
  25.        System.out.println("4- Buscar por telefono");
  26.  
  27.        do {
  28.            System.out.print("Opcion: ");
  29.            n = dato.nextInt();
  30.            switch (n) {
  31.                case 1:
  32.                    //Aca quiero llamar a op1
  33.                    op1();
  34.                    break;
  35.                case 2 :
  36.                    op2();
  37.                    break;
  38.            }
  39.  
  40.  
  41.        } while (n != 0 && n < 5);
  42.  
  43.  
  44.    } //Aca se van a cargar los datos y crear los vectores
  45.  
  46.  
  47.    public void op1() {
  48.        System.out.print("Cuantos datos se ingresaran? ");
  49.        num = dato.nextInt();
  50.        datos = new int[num];
  51.        nombre = new String[num];
  52.        apellido = new String[num];
  53.        telefono = new String[num];
  54.        dato.nextLine();
  55.        for (int i = 0; i < num; i++) {
  56.            System.out.print("Ingrese nombre: ");
  57.            nombre[i] = dato.nextLine();
  58.            System.out.print("Ingrese apellido: ");
  59.            apellido[i] = dato.nextLine();
  60.            System.out.print("Ingrese telefono: ");
  61.            telefono[i] = dato.nextLine();
  62.        }
  63.    } //Aca se van a mostrar los datos de los vectores
  64.  
  65.    public void op2() {
  66.        System.out.println("Cuantos datos quiere ver? ");
  67.        list = dato.nextInt();
  68.        System.out.println("Listado de datos:");
  69.        System.out.println("--------------------------");
  70.        for (int i = 0; i < list; i++) {
  71.            System.out.println(apellido[i] + " " + nombre[i] + " - " + telefono[i]);
  72.  
  73.        }
  74.    }
  75.  
  76.    public static void main(String[] args) {
  77.        TestDelObligatorioV2 prueba = new TestDelObligatorioV2();
  78.        prueba.iniciar();
  79.        prueba.op1();
  80.        prueba.op2();
  81.    }
  82.  
  83. }
  84.  

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
  1. public void op2() {
  2.        System.out.println("Cuantos datos quiere ver? ");
  3.        list = dato.nextInt();
  4.        System.out.println("Listado de datos:");
  5.        System.out.println("--------------------------");
  6.        for (int i = 0; i < list; i++) {
  7.            System.out.println(apellido[i] + " " + nombre[i] + " - " + telefono[i]);
  8.        }
  9.    }
« Última modificación: 5 Octubre 2018, 01:19 am por rub'n » En línea



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 ki
3n31ch


Desconectado Desconectado

Mensajes: 445


Grandes conocimientos engendran grandes dudas


Ver Perfil
Re: Llamar objetos desde un switch
« Respuesta #5 en: 5 Octubre 2018, 01:27 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
En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Llamar objetos desde un switch
« Respuesta #6 en: 5 Octubre 2018, 01:38 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
En línea



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 ki
MrSimpatia

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: Llamar objetos desde un switch
« Respuesta #7 en: 5 Octubre 2018, 02:24 am »

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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como llamar vnc desde vb « 1 2 »
Programación Visual Basic
FresyMetal 12 9,206 Último mensaje 29 Agosto 2008, 23:07 pm
por krackwar
Llamar a una función en ASM desde C
Programación C/C++
JonaLamper 4 5,678 Último mensaje 24 Abril 2014, 00:57 am
por JonaLamper
Problema al crear objetos con método switch
Java
Finishim 3 3,544 Último mensaje 14 Junio 2015, 11:57 am
por robertofd1995
[SOLUCIONADO] Llamar a PHP desde C
Programación C/C++
AleBallesta 6 3,327 Último mensaje 14 Junio 2015, 23:04 pm
por AleBallesta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines