Foro de elhacker.net

Programación => Java => Mensaje iniciado por: camaleon123 en 30 Diciembre 2009, 02:04 am



Título: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: camaleon123 en 30 Diciembre 2009, 02:04 am
hOla q tal felices fiestas a todos!

Ando haciendo ejercicios con java, en especifico: Arrays (cadenas).

Ando inventando y haciendo un mega ejercicio que incluye todo lo que he aprendido de arrays, metodos, switch, if, for, while y do-while, mi problema es:

Hacer un programa que haga lo siguiente:

menu con switch

opcion 1 pedirle al usuario de que tamaño quiere la cadena1 y llenarla con valores
opcion 2 pedirle al usuario de que tamaño quiere la cadena2 y llenarla con valores
opcion 3 mezclar cadena 1 y cadena 2
opcion 4 sumar los valores de la cadena 1 y cadena 2
opcion 5 restar los valores de la cadena 1 de cadena 2
opcion 6 ordenar ascendentemente las dos cadenas
opcion 7 ordenar descendentemente las dos cadenas
opcion 8 crear una tercera cadena (cadena3), definida por el usuario y llenarla con valoes
opcion 9 ver tres cadenas= cadena1, cadena2 y cadena3
opcion 10 buscar un dato que el usuario desee en las cadenas, frecuencia, posicion
opcion 11 crear nueva cadena (cadena4), que el usuario de el tamaño y rellene con valores entre años 1980 y 2009 (un if)
opcion 12 crear nueva cadena (cadena5) que el usuario de el tamaño de la cadena y especifique un rango de X valor a X valor y le de valores (rellene)
opcion 13 mostrar 5 cadenas ascendentemente
opcion 14 mostrar los numeros pares de las 5 cadenas
opcion 15 mostrar los numeros impares de las 5 cadenas
opcion 16 mostrar numeros perfectos de las 5 cadenas
opcion 17 mostrar numeros amigos de las 5 cadenas
opcion 18 salir

Como ven es algo laborioso, ya comenze a hacer el programa pero estoy detenido en el case 3, porque para el case 1 pido el valor que desea y de ahi envio a un metodo el cual sirve para rellenar los valores de las cadenas y regresa al menu. Pero en el case 3 al poner:
Código:
case 3: proyectopersonal.mezclar(cadena1, cadena2);
                        break;
Netbeans muestra que la variable cadena1 y cadena2 no puede ser inicializada.

Alguien sabe por que los valores dados en los cases 1 y 2 no se quedan en memoria y no estan disponibles para el case 3??? Que hago mal??. Creen que sea porque el switch esta dentro de un for y un do-while y por consecuencia al terminar el ciclo los valores dados a los cases 1 y 2 no se almacenan y/o no quedan en memoria??

Mi codigo que he creado es el siguiente:

Código:
import javax.swing.*;

public class proyectopersonal
{
    public static void main(String arg[])
    {
        int x1, x2;

        int opcion;

        do
        {
            opcion=Integer.parseInt(JOptionPane.showInputDialog(null, "Escribe el numero de la opcion que deseas ejecutar: \n" +
                    "1) Añadir valores para la cadena 1. \n" +
                    "2) Añadir valores para la cadena 2. \n" +
                    "3) Mezclar cadena 1 y cadena 2 y mostrar la cadena resultante. \n" +
                    "4) Sumar cadena 1 y cadena 2. \n" +
                    "5) Restar cadena 1 de cadena 2. \n" +
                    "6) Ordenar las 3 cadenas ascendentemente. \n" +
                    "7) Ordenar las 3 cadenas descendentemente. \n" +
                    "IMPORTANTE: LAS OPCIONES 9 A LA 17 REQUIEREN EJECUTAR PRIMERO \n" +
                    "LAS OPCION 8, 11 y 12 PARA QUE FUNCIONE CORRECTAMENTE. \n" +
                    "8) Crear una nueva cadena (cadena3). \n" +
                    "9) Ver las 3 cadenas. \n" +
                    "10) Buscar un valor en las 3 cadenas. \n" +
                    "11) Crear una nueva cadena (cadena 4) definida por el usuario que acepta solo años entre 1980 y 2010. \n" +
                    "12) Crear una nueva cadena (cadena 5) entre un rango especifico definido por el usuario. \n" +
                    "13) Mostrar 5 cadenas Ascendentemente. \n" +
                    "14) Mostrar los Numero Pares de las 5 cadenas. \n" +
                    "15) Mostrar los Numero ImPares de las 5 cadenas. \n" +
                    "16) Mostrar los Numeros Perfectos de las 5 cadenas. \n" +
                    "16) Mostrar los Numeros Amigos de las 5 cadenas. \n" +
                    "17) Salir del Programa. \n"));

            switch (opcion)
            {
                case 1: x1=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa la longitud que deseas que tenga la cadena 1: \n"));
                        int cadena1[] = new int[x1];
                        proyectopersonal.leervalores(cadena1, x1);
                        break;

                case 2: x2=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa la longitud que deseas que tenga la cadena 2: \n"));
                        int cadena2[] = new int[x2];
                        proyectopersonal.leervalores(cadena2, x2);
                        break;

                case 3: proyectopersonal.mezclar(cadena1, cadena2);
                        break;

                case 17: JOptionPane.showMessageDialog(null, "Gracias por usar el programa");
                        break;
                
                default: JOptionPane.showMessageDialog(null,"Opcion Incorrecta, corrobora el numero que introduciste");
                        break;
            }
        }
        while (opcion!=17);

    }

public static void leervalores(int cadena[], int x)
    {
        int posicion;

        for(posicion=0; posicion<cadena.length;posicion++)
        {
            cadena[posicion]=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa " + x +" valores para la cadena 1: \n"));
        }
}

    public static void mezclar(int cadena1[], int cadena2[])
    {

    }
}

Como nota, cuando pido los valores antes del do y del switch los valores de las cadenas si estan disponibles para los cases, pero no se ve nada estetico que primero pida el tamaño y valores de las cadenas 1 y 2 y despues el menu, por lo que quiero hacerlo dentro del switch, pueden decirme como hacer que los valores esten disponibles para todos los cases?

Esto pongo fuera del switch y si esta disponible para todo los cases:

Código:
import javax.swing.*;

public class proyectopersonal
{
    public static void main(String arg[])
    {
        int x1, x2;
        // para establecerlo antes del switch
        x1=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa la longitud que deseas que tenga la cadena 1: \n"));
        x2=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa la longitud que deseas que tenga la cadena 2: \n"));

        int cadena1[] = new int[x1];
        int cadena2[] = new int[x2];
        

        // enviar directametne antes del switch las cadenas y valores
       proyectopersonal.leervalores(cadena1, cadena2, x1, x2);

        int opcion;

        do{ switch {
}ETCETERA...
}

Y en el metodo puse:

Código:
public static void leervalores(int cadena1[], int cadena2[], int x1, int x2)
    {
        int posicion;

for(posicion=0; posicion<=cadena1.length;posicion++)
        {
            cadena1[posicion]=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa " + x1 +" valores para la cadena 1: \n"));
        }

        for(posicion=0; posicion<=cadena2.length;posicion++)
        {
            cadena2[posicion]=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa " + x2 +" valores para la cadena 2: \n"));
        }
}


Título: Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: camaleon123 en 30 Diciembre 2009, 02:07 am
me explico mas: como parte del ejercicio del que pido ayuda, la opcion 3 debe de hacer lo siguiente:

"3) Mezclar (Unir) cadena 1 y cadena 2 en una nueva cadena y mostrar la cadena resultante. \n"

De la cadena1 almacenada del case 1 y la cadena2 del case2, voy a mezclar/unir esas dos cadenas en una sola cadena llamada cadena3. Por eso quiero que los valores de las cadenas del case 1 y case 2 esten guardados en memoria para poder -en el inciso 3- mezclarlas.

El inciso/opcion 3 hara algo que ya tengo echo antes separadamente (no dentro de un switch ni con metodos) como se ve en este ejercicio:

import javax.swing.*;

public class copiar2arraysen1
{
    public static void main(String arg[])
    {
        // ESTE ARREGLO DE ESTE EJERCICIO SERIA EL QUE OBTENGO DEL CASE 1 DEL EJERCICIO QUE PIDO AYUDA
        int arreglo_a[]={10,11,12,13,14,15,16};

        // ESTE ARREGLO DE ESTE EJERCICIO SERIA EL QUE OBTENGO DEL CASE 2 DEL EJERCICIO QUE PIDO AYUDA       
        int arreglo_b[]={20,21,22,23,24,25,26};

        // ESTE ARREGLO DE ESTE EJERCICIO SERIA EL ARREGLO QUE OBTENGO DEL CASE 3 DEL EJERCICIO QUE PIDO AYUDA.
        int arreglo_c[]=new int[arreglo_a.length+arreglo_b.length];

        //AQUI MEZCLO LOS DOS ARREGLOS EN UN TERCERO, AQUI NO HAY PROBLEMA PORQUE ES UN PROGRAMA SIN SWITCH NI NADA, PERO ESTO MISMO QUIERO HACER EN EL CASE 3 DEL EJERCICIO QUE PIDO AYUDA
        System.arraycopy(arreglo_a, 0, arreglo_c, 0, arreglo_a.length);
        System.arraycopy(arreglo_b, 0, arreglo_c, arreglo_a.length, arreglo_b.length);

        //AQUI CONCATENO LA CADENA_A EN UN STRING
        String cadena1="";
        for(int c=0;c<arreglo_a.length;c++)
        {
            cadena1=cadena1+arreglo_a[c]+"\n";
        }

        //AQUI CONCATENO LA CADENA_B EN UN STRING
        String cadena2="";
        for(int c2=0;c2<arreglo_b.length;c2++)
        {
            cadena2=cadena2+arreglo_b[c2]+"\n";
        }

        //AQUI CONCATENO LA CADENA_C EN UN STRING
        String cadena3="";
        for(int c3=0; c3<arreglo_c.length;c3++)
        {
            cadena3=cadena3+arreglo_c[c3]+"\n";
        }
   
        //AQUI MUESTRO LAS 2 CADENAS ORIGINALES Y LA CADENA3 RESULTANTE DE UNIR/MEZCLAR LAS 2 CADENAS
        JOptionPane.showMessageDialog(null, "El arreglo 1 es: \n" + cadena1 + "El arreglo 2 es: \n" + cadena2 + "El arreglo mezclado es: \n" + cadena3); //sino funciona poner: new String(cadena3);
        JOptionPane.showMessageDialog(null,arreglo_c[4]);
        JOptionPane.showMessageDialog(null,arreglo_c[10]);
    }
}



Título: Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: Leyer en 30 Diciembre 2009, 02:25 am
deberias programar mas orientado a obj ;) otra cosas no crees clases que hagan funciones simples para eso estan los metodos..sobre lo que dices el error esta en que cadena1, cadena2 no esta inicializado obviamnete ya que estas se encuantran en al case 1 y case 2 que son secuencias distintas pero no esta definida en la 3 por eso dice no definida deberias usar una variables de instancias.

PD: las etiquedas
Código
  1. [code=java]
[/code]


Título: Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: camaleon123 en 30 Diciembre 2009, 02:34 am
deberias programar mas orientado a obj ;) otra cosas no crees clases que hagan funciones simples para eso estan los metodos..sobre lo que dices el error esta en que cadena1, cadena2 no esta inicializado obviamnete ya que estas se encuantran en al case 1 y case 2 que son secuencias distintas pero no esta definida en la 3 por eso dice no definida deberias usar una variables de instancias.

PD: las etiquedas
Código
  1. [code=java]
[/code]

Gracias por la respuesta, lo que pasa es que ando aprendiendo java, ando en lo basico y pues me han enseñado en crear clases para todos mis programas, aunque me has dejado en duda como es orientado a objetos? como crear los metodos??

Mi maestra, como la mayoria, no enseña muy bien, uno tiene que documentarse de libros, internet, etc y he logrado mucho y espero lograr mas aqui en el foro, asi q cualquier sugerencia es valida ;)

Yo programaba en C, ahi crearia un "metodo" para cada uno, e incluirlo desde el inicio con #include factorizar.h etc pero necesito practicar de la manera que lo pongo en java, como lo haria?

Ok entonces ya entiendo, los valores puestos solo son para el case 1 y case 2 en su momento, por eso no esta disponible fuera del case, es como cuando uno declara algo dentro de un while o de un if y lo desea usar fuera de ellos. Entonces como hago para que los valores de esa cadena del case 1 y case 2 esten disponibles en los demas cases?? Existe alguna manera de hacerlo asi? Sin pedir esos valores antes?


Título: Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: Leyer en 30 Diciembre 2009, 03:04 am
es decir a obj creando una instancia de la class proyecto con sus metodos (referentes a este) y llamandolos no se si me explico.
Ej:{

Class persona{
public void caminar();
public void correr();
/etc....
}
//instancia de persona
Persona p = new Persona();
p.caminar();

}

y lo anterior debes veo que tu programa solo usa 2 array asi funcionaria bien

Código
  1. import javax.swing.JOptionPane;
  2.  
  3. public class proyectopersonal{
  4.    public static void main(String arg[]){
  5.  
  6.        int x1=0, x2=0, cadena1[] = null, cadena2[]= null, opcion;
  7.        do
  8.        {
  9.            opcion=Integer.parseInt(JOptionPane.showInputDialog(null, "Escribe el numero de la opcion que deseas ejecutar: \n" +
  10.                    "1) Añadir valores para la cadena 1. \n" +
  11.                    "2) Añadir valores para la cadena 2. \n" +
  12.                    "3) Mezclar cadena 1 y cadena 2 y mostrar la cadena resultante. \n" +
  13.                    "4) Sumar cadena 1 y cadena 2. \n" +
  14.                    "5) Restar cadena 1 de cadena 2. \n" +
  15.                    "6) Ordenar las 3 cadenas ascendentemente. \n" +
  16.                    "7) Ordenar las 3 cadenas descendentemente. \n" +
  17.                    "IMPORTANTE: LAS OPCIONES 9 A LA 17 REQUIEREN EJECUTAR PRIMERO \n" +
  18.                    "LAS OPCION 8, 11 y 12 PARA QUE FUNCIONE CORRECTAMENTE. \n" +
  19.                    "8) Crear una nueva cadena (cadena3). \n" +
  20.                    "9) Ver las 3 cadenas. \n" +
  21.                    "10) Buscar un valor en las 3 cadenas. \n" +
  22.                    "11) Crear una nueva cadena (cadena 4) definida por el usuario que acepta solo años entre 1980 y 2010. \n" +
  23.                    "12) Crear una nueva cadena (cadena 5) entre un rango especifico definido por el usuario. \n" +
  24.                    "13) Mostrar 5 cadenas Ascendentemente. \n" +
  25.                    "14) Mostrar los Numero Pares de las 5 cadenas. \n" +
  26.                    "15) Mostrar los Numero ImPares de las 5 cadenas. \n" +
  27.                    "16) Mostrar los Numeros Perfectos de las 5 cadenas. \n" +
  28.                    "16) Mostrar los Numeros Amigos de las 5 cadenas. \n" +
  29.                    "17) Salir del Programa. \n"));
  30.  
  31.            switch (opcion){
  32.  
  33.                case 1: x1=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa la longitud que deseas que tenga la cadena 1: \n"));
  34.                       cadena1 = new int[x1];
  35.                        proyectopersonal.leervalores(cadena1, x1);
  36.                        break;
  37.  
  38.                case 2: x2=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa la longitud que deseas que tenga la cadena 2: \n"));
  39.                        cadena2 = new int[x2];
  40.                        proyectopersonal.leervalores(cadena2, x2);
  41.                        break;
  42.  
  43.                case 3: proyectopersonal.mezclar(cadena1, cadena2);
  44.                        break;
  45.  
  46.                case 17: JOptionPane.showMessageDialog(null, "Gracias por usar el programa");
  47.                        break;
  48.  
  49.                default: JOptionPane.showMessageDialog(null,"Opcion Incorrecta, corrobora el numero que introduciste");
  50.                        break;
  51.            }
  52.        }
  53.        while (opcion!=17);
  54.    }
  55. public static void leervalores(int cadena[], int x){
  56.        for(int posicion=0; posicion<cadena.length;posicion++)
  57.        {
  58.            cadena[posicion]=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa " + x +" valores para la cadena 1: \n"));
  59.        }
  60. }
  61.    public static void mezclar(int cadena1[], int cadena2[]){
  62.  
  63.    }


Título: Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: camaleon123 en 30 Diciembre 2009, 03:50 am
FUNCIONOO! graciaaas!! Ahora si corre el programa, pero podrias explicarme como es que esta linea de codigo tuya resolvio todo?:

Código
  1. int x1=0, x2=0, cadena1[] = null, cadena2[]= null, opcion;

ya probe con eso y ya no me menciona valor no inicializado en el case3, ademas ya añadi el codigo restante al metodo mezclar y funciona excelente! gracias!

El case 3 ahora SI hace lo siguiente:

Código
  1. public static void mezclar(int cadena1[], int cadena2[])
  2.    {
  3. int cadena3[] = new int[cadena1.length+cadena2.length];
  4.  
  5.        System.arraycopy(cadena1, 0 , cadena3, 0, cadena1.length);
  6.        System.arraycopy(cadena2, 0 , cadena3, cadena1.length, cadena2.length);
  7.  
  8.        String cad1="";
  9.        for(int c=0;c<cadena1.length;c++)
  10.        {
  11.            cad1=cad1+cadena1[c]+"\n";
  12.        }
  13.  
  14.        String cad2="";
  15.        for(int c2=0;c2<cadena2.length;c2++)
  16.        {
  17.            cad2=cad2+cadena2[c2]+"\n";
  18.        }
  19.  
  20.        String cad3="";
  21.        for(int c3=0; c3<cadena3.length;c3++)
  22.        {
  23.            cad3=cad3+cadena3[c3]+"\n";
  24.        }
  25.  
  26.        JOptionPane.showMessageDialog(null, "El arreglo 1 es: \n" + cad1 + "El arreglo 2 es: \n" + cad2 + "El arreglo mezclado es: \n" + cad3); //recordatorio - sino funciona a veces hay que poner: new String(cadena3);
  27.    }
  28.  

Aunque como nota si declaro cadena3[] al principio en el main de la clase dice "variable3=> variable3 no es una variable conocida en el contexto actual"

Código:
int cadena3[] = new int[cadena1.length+cadena2.length];

tendre algo mal por ahi?? aunque tengo la duda... cuando declaro en el main y solicito ese dato en otro metodo dice "cannot find the symbol" porque no lo reconoce porque esta declarada en el main, no pasara asi lo mismo cuando descubra porque me dice eso de no es variable conocida en el contexto actual y lo declare en el main y luego lo pida en     public static void mezclar(int cadena1[], int cadena2[]) ??


Me gustaria saber cuanta diferencia hay en declarar los arrays al principio con valor null y x1 con 0?  Porque fue algo sencillo que pareciera no haber diferencia,

me intereso eso de a objetos, puedes explicarme mas con algun ejemplo real y pequeño de java?


Título: Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: camaleon123 en 30 Diciembre 2009, 04:06 am
una ultima duda de este tema, debo usar null con un if en el metodo leervalores para evaluar si el objeto es nulo o no? Entre la ayuda que recibi me sugieron eso, pero
 ¿¿es necesario??

Código
  1. public static void leervalores(int cadena[], int x) {
  2.        if(cadena == null) // ¿¿ es NecesariO?? o lo quito?
  3.            return;// ¿¿ es NecesariO?? o lo quito?
  4.        int posicion;
  5.        for(posicion=0; posicion<cadena.length;posicion++) {
  6.            cadena[posicion]=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa " + x +" valores para la cadena 1: \n"));
  7.        }
  8.    }
  9.  

y una ultima duda para poder cerrar con este tema, estuve buscando ayuda por todas partes, pero solo aqui resolvi mi problema :D sirve poner en la parte de "do {" lo siguiente:

Código
  1. do {
  2.  
  3. try {
  4.                opcion=Integer.parseInt(JOptionPane.showInputDialog(null, "Escribe el numero de la opcion que deseas ejecutar: \n" +
  5.                "1) Añadir valores para la cadena 1. \n" +
  6.                "2) Añadir valores para la cadena 2. \n" +
  7.                "3) Mezclar cadena 1 y cadena 2 y mostrar la cadena resultante. \n" +
  8.                "4) Etecetera \n"));
  9.            } catch(NumberFormatException x){
  10.                opcion = 20; //O cualquier numero mayor que 17
  11.       }
  12.  
  13.       switch (opcion) {
  14.       case 1: etc
  15.       case 2: etc
  16.       }
  17. }while(opcion!=17)
  18.  

cabe decir que eso NO resolvio mi problema -al menos como lo intente-, pero podrias explicarme brevemente para que es ese try?? y el catch??


Título: Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: Leyer en 30 Diciembre 2009, 04:30 am
podrias explicarme como es que esta linea de codigo tuya resolvio todo?:
Simple bueno solo coloque las variables antes que el resto del code asi este todo el code anterior lo reconocera

Citar
aunque tengo la duda... cuando declaro en el main y solicito ese dato en otro metodo dice "cannot find the symbol" porque no lo reconoce porque esta declarada en el main, no pasara asi lo mismo cuando descubra porque me dice eso de no es variable conocida en el contexto actual y lo declare en el main y luego lo pida en     public static void mezclar(int cadena1[], int cadena2[]) ??
bueno veras los metodos que estas creando son de la clase mas no se pueden declarar metodos en el main , he hay tu problema por eso te dice eso. ya que la variable esta en el metodo de la class mas no esta definida en el main.

Citar
Me gustaria saber cuanta diferencia hay en declarar los arrays al principio con valor null y x1 con 0?  Porque fue algo sencillo que pareciera no haber diferencia,

eso depende de cada programador y el como sea la secuencia de tu programa yo lnicializo asi para evitar errores como variable no inicializada pero mas adelante se inicializa..

Citar
me intereso eso de a objetos, puedes explicarme mas con algun ejemplo real y pequeño de java?
http://foro.portalhacker.net/index.php/topic,97078.0.html
Citar
una ultima duda de este tema, debo usar null con un if en el metodo leervalores para evaluar si el objeto es nulo o no? Entre la ayuda que recibi me sugieron eso, pero
 ¿¿es necesario??

No es necesario.

Citar
pero podrias explicarme brevemente para que es ese try?? y el catch??
el try{ }catch sirve para capturar exepciones generadas por algun tipo de evento  y mostarla como ej pasar un String invalido  a entero o dividir un numero entre 0 , x cantidad de errores ..

Saludos!


Título: Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: camaleon123 en 1 Enero 2010, 00:52 am
Gracias por tu valiosa ayuda LEYER!  :D

hasta ahorita voy muy bien con este ejercicio que ando haciendo, pero siempre he tenido una duda:

"Como puedo regresar al menu (inicio del programa, clase main) si en el cuadro del JOptionPane.showInputDialog el usuario le da click en CANCELAR?"

Ejemplo corto para explicarme:

Código
  1.  
  2. import javax.swing.JOptionPane;
  3.  
  4. public class pruebas {
  5.  
  6.    public static void main(String arg[]) {
  7.  
  8. int cadena[] = new int[5];
  9. int opcion;
  10.  
  11.  
  12. do
  13. {
  14. opcion=Integer.parseInt(JOptionPane.showInputDialog(null, "Selecciona tu opcion: \n" +
  15. "1) Cadena. \n" +
  16. "2) Salir."));
  17.  
  18. switch(opcion) {
  19.  
  20. case 1: pruebas.leer(cadena);
  21. break;
  22. case 2: JOptionPane.showMessageDialog(null, "Adios");
  23. break;
  24. default: JOptionPane.showMessageDialog(null, "Incorrecto");
  25. break;
  26. }
  27. }while(opcion!=2);
  28.  
  29.   }
  30.  
  31.    public static void leer(int cadena[]) {
  32.  
  33.    String mostrar="";
  34.  
  35. for(int posicion=0;posicion<cadena.length;posicion++) {
  36.  
  37.     // AQUI ES MI DUDA, si la persona se equivoco de opcion y le da en cancelar o en cerrar para SEGUN regresar el menu, el programa se cierra y da un error:
  38. /*
  39. Exception in thread "main" java.lang.NumberFormatException: null
  40.     at java.lang.Integer.parseInt(Integer.java:417)
  41.     at java.lang.Integer.parseInt(Integer.java:499)
  42.     at pruebas.leer(pruebas.java:37)
  43.     at pruebas.main(pruebas.java:20)
  44.  
  45. Process completed.
  46. */
  47.     cadena[posicion] = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n"));
  48.     mostrar=mostrar+cadena[posicion]+"\n";
  49.  
  50.   }
  51.     JOptionPane.showMessageDialog(null, "Los valores introducidos fueron: \n" + mostrar);
  52.  
  53.   }
  54. }
  55.  

Tambien estudie Visual Basic y ahi es facil porque en cada boton le doy doble click y edito la propiedad del boton, si es cancelar -segun el caso- regresa al menu anterior o no guarda los datos, etc.

Pero aqui en java cuando la persona seleccion la opcion 1 del case 1, aparece el cuadro de InputDialog de JOption, pero la persona se equivoca y da en cancelar, el programa no regresa al menu principal (switch) y muestra el siguiente error:

Exception in thread "main" java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Integer.java:417)
    at java.lang.Integer.parseInt(Integer.java:499)
    at pruebas.leer(pruebas.java:37)
    at pruebas.main(pruebas.java:20)

Process completed.

Como puedo hacer que en cancelar o cerrar regrese al menu del switch o clase principal?? Como funciona el return se puede usar?? He leido algo sobre etiquetas, pero como funciona? se puede regresar de un metodo a una etiqueta en la clase main? o como puedo hacer que regresa al menu si dan en cancelar?


Título: Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: Leyer en 1 Enero 2010, 01:11 am
 :) vale
esta comentado para que lo veas bien

Código
  1. import javax.swing.JOptionPane;
  2.  
  3. public class pruebas {
  4. //variables
  5. private  int cadena[]  =  new int[5];
  6. private  int opcion    = 0;
  7.  
  8. //Metodo Menu principal
  9. public void menu(){
  10. do
  11. {
  12. String select = JOptionPane.showInputDialog(null, "Selecciona tu opcion: \n" +
  13.    "1) Cadena. \n" +
  14. "2) Salir.  ");
  15. opcion=Integer.parseInt(select);
  16. switch(opcion) {
  17. case 1: leer(cadena);
  18. break;
  19. case 2: JOptionPane.showMessageDialog(null, "Adios");
  20. break;
  21. default: JOptionPane.showMessageDialog(null, "Incorrecto");
  22. break;
  23. }
  24. }while(opcion!=2);
  25. }
  26. //Metodo de para leer
  27.    public void leer(int cadena[]) {
  28.        String mostrar="";
  29.     for(int posicion=0;posicion<cadena.length;posicion++) {
  30.         String temp =JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n");
  31.         //comprobamos que el valor ingresado sea distinto que null y si es null
  32.         // regresa al menu principal menu();
  33.         if(temp!= null){
  34.         cadena[posicion] = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n"));
  35.         mostrar=mostrar+cadena[posicion]+"\n";
  36.         //regresamos al menu principal
  37.         }else
  38.         menu();
  39.       }
  40.         JOptionPane.showMessageDialog(null, "Los valores introducidos fueron: \n" + mostrar);
  41.       }
  42.    public static void main(String arg[]) {
  43.    // instancia de pruebas y llamamos al menu principal
  44.     new pruebas().menu();
  45.    }
  46. }


Título: Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: camaleon123 en 1 Enero 2010, 01:32 am
:) vale
esta comentado para que lo veas bien

Código
  1. import javax.swing.JOptionPane;
  2.  
  3. public class pruebas {
  4. //variables
  5. private  int cadena[]  =  new int[5];
  6. private  int opcion    = 0;
  7.  
  8. //Metodo Menu principal
  9. public void menu(){
  10. do
  11. {
  12. String select = JOptionPane.showInputDialog(null, "Selecciona tu opcion: \n" +
  13.    "1) Cadena. \n" +
  14. "2) Salir.  ");
  15. opcion=Integer.parseInt(select);
  16. switch(opcion) {
  17. case 1: leer(cadena);
  18. break;
  19. case 2: JOptionPane.showMessageDialog(null, "Adios");
  20. break;
  21. default: JOptionPane.showMessageDialog(null, "Incorrecto");
  22. break;
  23. }
  24. }while(opcion!=2);
  25. }
  26. //Metodo de para leer
  27.    public void leer(int cadena[]) {
  28.        String mostrar="";
  29.     for(int posicion=0;posicion<cadena.length;posicion++) {
  30.         String temp =JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n");
  31.         //comprobamos que el valor ingresado sea distinto que null y si es null
  32.         // regresa al menu principal menu();
  33.         if(temp!= null){
  34.         cadena[posicion] = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n"));
  35.         mostrar=mostrar+cadena[posicion]+"\n";
  36.         //regresamos al menu principal
  37.         }else
  38.         menu();
  39.       }
  40.         JOptionPane.showMessageDialog(null, "Los valores introducidos fueron: \n" + mostrar);
  41.       }
  42.    public static void main(String arg[]) {
  43.    // instancia de pruebas y llamamos al menu principal
  44.     new pruebas().menu();
  45.    }
  46. }

wooooow MUCHAS GRACIAS!  ;D Eres todo un Master en Java, no encontraba nada en google para hacer eso, solo di con algo sobre  "catch (Exception e) { return null }" pero nada claro.

No se que hora tengas pero: Feliz Año Nuevo 2010!

Nos veremos en el 2010 aqui en el foro, espero y deseo que con menos dudas y mas respuestas mias de java :D

¡Feliz Año Nuevo!


Título: Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: Leyer en 1 Enero 2010, 02:05 am
mas aprende uno por experiencia y practica :)
jaja claro aqui faltan 4 horas :P y feliz año nuevo


Título: Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: camaleon123 en 1 Enero 2010, 04:42 am
Código
  1.    public void leer(int cadena[]) {
  2.        String mostrar="";
  3.  
  4.     for(int posicion=0;posicion<cadena.length;posicion++) {
  5.  
  6.         String temp =JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n");
  7.  
  8.         //comprobamos que el valor ingresado sea distinto que null y si es null
  9.         // regresa al menu principal menu();
  10.         if(temp!= null){
  11.  
  12.         cadena[posicion] = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n"));
  13.  
  14.         mostrar=mostrar+cadena[posicion]+"\n";
  15.  
  16.         //regresamos al menu principal
  17.         }else
  18.  
  19.         menu();
  20.       }
  21.         JOptionPane.showMessageDialog(null, "Los valores introducidos fueron: \n" + mostrar);
  22.       }

Probe el codigo y al ingresar al metodo leer, ingreso hasta 10 datos y de ahi me muestra la cadena. Ejemplo: Ingreso 1,2,3,4,5,6,7,8,9,10 y solo me muestra 2,4,6,8,10. Cheque el codigo y pues efectivamente asi es porque primero hay un String que me pide un dato e ingreso 1 y checa que no es null y de ahi entre al verdadero JOption que establece el valor a la cadena, ahi pongo 2, y asi se repite...

La idea me gusto y ando queriendo perfeccionar pero no puedo, ya entendi que el error es porque al cerrar ventana o dar en cancelar asigna "null" a la entrada de datos y sale pero muestra error diciendo que el dato es null.

De ahi se me ocurrio asignar la cadena a un valor entero si no es null pero me dice: "incompatibles types, requerided: int, found: java.lang.String", lo que modifico es lo siguiente:

Código
  1. public void leer(int cadena[]) {
  2.        String mostrar="";
  3.     for(int posicion=0;posicion<cadena.length;posicion++) {
  4.         String temp =JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n");
  5.         //comprobamos que el valor ingresado sea distinto que null y si es null
  6.         // regresa al menu principal menu();
  7.         if(temp!= null){
  8.         //asigno que el valor de cadena[posicion] sea igual a lo que tiene temp, pero da error de incompatibilidad de datos.
  9.         cadena[posicion] = temp;
  10.         mostrar=mostrar+cadena[posicion]+"\n";
  11.         //regresamos al menu principal
  12.         }else
  13.         menu();
  14.       }
  15.         JOptionPane.showMessageDialog(null, "Los valores introducidos fueron: \n" + mostrar);
  16.       }
  17.  

Lo que he tratado es que en vez de:

Código
  1. String temp =JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n");

poner:

Código
  1. int temp = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n"));

De esa manera se quita el error en:

Código
  1. cadena[posicion]=temp;

pero me muestra un error en:

Código
  1. if(temp!=null)

porque es "Incomparable types: int and <nulltype>

creo que esto que quiero hacer es imposible en java...

mientras seguire buscando en google sobre el tipo de dato "null" y como compararlo


Título: Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: camaleon123 en 1 Enero 2010, 04:49 am
se me acaba de ocurrir dos cosas:

1.- editar el archivo Integer.java en la linea 417 donde dice:
Código
  1.        if (s == null) {
  2.            throw new NumberFormatException("null");
y en vez de ponerle null ponerle un 1, asi al cerrar o dar en cancelar estable un valor 1 en vez de null, pero afecta eso a todo java??

2.- sino se puede lo anterior, se puede convertir de un valor entero a un valor String?


Título: Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
Publicado por: camaleon123 en 1 Enero 2010, 05:23 am
Me cito a mi mismo:

2.- sino se puede lo anterior, se puede convertir de un valor entero a un valor String?

Al fin pude hacerlo!!  ;D :D creo que el año nuevo me depara un nuevo rumbo...

Lo que hice fue crear otra variable entero llamada temp2 que tenga el valor del string temp, de ahi cadena[posicion] toma el valor de temp2.

El codigo listo es:

Código
  1. public void leer(int cadena[]) {
  2.        String mostrar="";
  3.     for(int posicion=0;posicion<cadena.length;posicion++) {
  4.         String temp = JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n");
  5.         //comprobamos que el valor ingresado sea distinto que null y si es null
  6.         // regresa al menu principal menu();
  7.         if(temp!= null){
  8.  
  9.         int temp2=Integer.parseInt(temp);
  10.  
  11.         cadena[posicion] = temp2;
  12.  
  13.         mostrar=mostrar+cadena[posicion]+"\n";
  14.         //regresamos al menu principal
  15.         }else
  16.         menu();
  17.       }
  18.         JOptionPane.showMessageDialog(null, "Los valores introducidos fueron: \n" + mostrar);
  19.       }
  20.