elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
27 Mayo 2012, 23:51  


Tema destacado: ¡Aprende hacking con práctica! - WarZone, el wargame de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java (Moderadores: Debci, Leyer)
| | | |-+  Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch  (Leído 3,255 veces)
camaleon123

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« en: 30 Diciembre 2009, 02:04 »

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"));
        }
}


« Última modificación: 30 Diciembre 2009, 02:14 por camaleon123 » En línea
camaleon123

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« Respuesta #1 en: 30 Diciembre 2009, 02:07 »

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_a0arreglo_c0arreglo_a.length);
        
System.arraycopy(arreglo_b0arreglo_carreglo_a.lengtharreglo_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=0c3<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]);
    }
}



En línea
Leyer
Moderador
***
Desconectado Desconectado

Mensajes: 772


[]


Ver Perfil WWW
Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« Respuesta #2 en: 30 Diciembre 2009, 02:25 »

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
 [code=java] 
[/code]
« Última modificación: 30 Diciembre 2009, 02:29 por LEYER » En línea

camaleon123

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« Respuesta #3 en: 30 Diciembre 2009, 02:34 »

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
 [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?
« Última modificación: 30 Diciembre 2009, 02:38 por camaleon123 » En línea
Leyer
Moderador
***
Desconectado Desconectado

Mensajes: 772


[]


Ver Perfil WWW
Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« Respuesta #4 en: 30 Diciembre 2009, 03:04 »

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
import javax.swing.JOptionPane;
 
public class proyectopersonal{
   public static void main(String arg[]){
 
       int x1=0, x2=0, cadena1[] = null, cadena2[]= null, 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"));
                      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"));
                       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){
       for(int 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[]){
 
   }
En línea

camaleon123

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« Respuesta #5 en: 30 Diciembre 2009, 03:50 »

FUNCIONOO! graciaaas!! Ahora si corre el programa, pero podrias explicarme como es que esta linea de codigo tuya resolvio todo?:

Código
 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
public static void mezclar(int cadena1[], int cadena2[])
   {
int cadena3[] = new int[cadena1.length+cadena2.length];
 
       System.arraycopy(cadena1, 0 , cadena3, 0, cadena1.length);
       System.arraycopy(cadena2, 0 , cadena3, cadena1.length, cadena2.length);
 
       String cad1="";
       for(int c=0;c<cadena1.length;c++)
       {
           cad1=cad1+cadena1[c]+"\n";
       }
 
       String cad2="";
       for(int c2=0;c2<cadena2.length;c2++)
       {
           cad2=cad2+cadena2[c2]+"\n";
       }
 
       String cad3="";
       for(int c3=0; c3<cadena3.length;c3++)
       {
           cad3=cad3+cadena3[c3]+"\n";
       }
 
       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);
   }
 

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?
« Última modificación: 30 Diciembre 2009, 03:53 por camaleon123 » En línea
camaleon123

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« Respuesta #6 en: 30 Diciembre 2009, 04:06 »

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
public static void leervalores(int cadena[], int x) {
       if(cadena == null) // ¿¿ es NecesariO?? o lo quito?
           return;// ¿¿ es NecesariO?? o lo quito?
       int posicion;
       for(posicion=0; posicion<cadena.length;posicion++) {
           cadena[posicion]=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa " + x +" valores para la cadena 1: \n"));
       }
   }
 

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
do {
 
try {
               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) Etecetera \n"));
           } catch(NumberFormatException x){
               opcion = 20; //O cualquier numero mayor que 17
      }
 
      switch (opcion) {
      case 1: etc
      case 2: etc
      }
}while(opcion!=17)
 

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??
« Última modificación: 30 Diciembre 2009, 04:09 por camaleon123 » En línea
Leyer
Moderador
***
Desconectado Desconectado

Mensajes: 772


[]


Ver Perfil WWW
Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« Respuesta #7 en: 30 Diciembre 2009, 04:30 »

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

camaleon123

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« Respuesta #8 en: 1 Enero 2010, 00:52 »

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
 
import javax.swing.JOptionPane;
 
public class pruebas {
 
   public static void main(String arg[]) {
 
int cadena[] = new int[5];
int opcion;
 
 
do
{
opcion=Integer.parseInt(JOptionPane.showInputDialog(null, "Selecciona tu opcion: \n" +
"1) Cadena. \n" +
"2) Salir."));
 
switch(opcion) {
 
case 1: pruebas.leer(cadena);
break;
case 2: JOptionPane.showMessageDialog(null, "Adios");
break;
default: JOptionPane.showMessageDialog(null, "Incorrecto");
break;
}
}while(opcion!=2);
 
  }
 
   public static void leer(int cadena[]) {
 
   String mostrar="";
 
for(int posicion=0;posicion<cadena.length;posicion++) {
 
    // 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:
/*
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.
*/

    cadena[posicion] = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n"));
    mostrar=mostrar+cadena[posicion]+"\n";
 
  }
    JOptionPane.showMessageDialog(null, "Los valores introducidos fueron: \n" + mostrar);
 
  }
}
 

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?
En línea
Leyer
Moderador
***
Desconectado Desconectado

Mensajes: 772


[]


Ver Perfil WWW
Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« Respuesta #9 en: 1 Enero 2010, 01:11 »

 :) vale
esta comentado para que lo veas bien

Código
import javax.swing.JOptionPane;
 
public class pruebas {
//variables
private  int cadena[]  =  new int[5];
private  int opcion    = 0;
 
//Metodo Menu principal
public void menu(){
do
{
String select = JOptionPane.showInputDialog(null, "Selecciona tu opcion: \n" +
   "1) Cadena. \n" +
"2) Salir.  ");
opcion=Integer.parseInt(select);
switch(opcion) {
case 1: leer(cadena);
break;
case 2: JOptionPane.showMessageDialog(null, "Adios");
break;
default: JOptionPane.showMessageDialog(null, "Incorrecto");
break;
}
}while(opcion!=2);
}
//Metodo de para leer
   public void leer(int cadena[]) {
       String mostrar="";
    for(int posicion=0;posicion<cadena.length;posicion++) {
        String temp =JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n");
        //comprobamos que el valor ingresado sea distinto que null y si es null
        // regresa al menu principal menu();
        if(temp!= null){
        cadena[posicion] = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n"));
        mostrar=mostrar+cadena[posicion]+"\n";
        //regresamos al menu principal
        }else
        menu();
      }
        JOptionPane.showMessageDialog(null, "Los valores introducidos fueron: \n" + mostrar);
      }
   public static void main(String arg[]) {
   // instancia de pruebas y llamamos al menu principal
    new pruebas().menu();
   }
}
« Última modificación: 1 Enero 2010, 01:13 por LEYER » En línea

camaleon123

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« Respuesta #10 en: 1 Enero 2010, 01:32 »

:) vale
esta comentado para que lo veas bien

Código
import javax.swing.JOptionPane;
 
public class pruebas {
//variables
private  int cadena[]  =  new int[5];
private  int opcion    = 0;
 
//Metodo Menu principal
public void menu(){
do
{
String select = JOptionPane.showInputDialog(null, "Selecciona tu opcion: \n" +
   "1) Cadena. \n" +
"2) Salir.  ");
opcion=Integer.parseInt(select);
switch(opcion) {
case 1: leer(cadena);
break;
case 2: JOptionPane.showMessageDialog(null, "Adios");
break;
default: JOptionPane.showMessageDialog(null, "Incorrecto");
break;
}
}while(opcion!=2);
}
//Metodo de para leer
   public void leer(int cadena[]) {
       String mostrar="";
    for(int posicion=0;posicion<cadena.length;posicion++) {
        String temp =JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n");
        //comprobamos que el valor ingresado sea distinto que null y si es null
        // regresa al menu principal menu();
        if(temp!= null){
        cadena[posicion] = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n"));
        mostrar=mostrar+cadena[posicion]+"\n";
        //regresamos al menu principal
        }else
        menu();
      }
        JOptionPane.showMessageDialog(null, "Los valores introducidos fueron: \n" + mostrar);
      }
   public static void main(String arg[]) {
   // instancia de pruebas y llamamos al menu principal
    new pruebas().menu();
   }
}

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!
En línea
Leyer
Moderador
***
Desconectado Desconectado

Mensajes: 772


[]


Ver Perfil WWW
Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« Respuesta #11 en: 1 Enero 2010, 02:05 »

mas aprende uno por experiencia y practica :)
jaja claro aqui faltan 4 horas :P y feliz año nuevo
En línea

camaleon123

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« Respuesta #12 en: 1 Enero 2010, 04:42 »

Código
    public void leer(int cadena[]) {
       String mostrar="";
 
    for(int posicion=0;posicion<cadena.length;posicion++) {
 
        String temp =JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n");
 
        //comprobamos que el valor ingresado sea distinto que null y si es null
        // regresa al menu principal menu();
        if(temp!= null){
 
        cadena[posicion] = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n"));
 
        mostrar=mostrar+cadena[posicion]+"\n";
 
        //regresamos al menu principal
        }else
 
        menu();
      }
        JOptionPane.showMessageDialog(null, "Los valores introducidos fueron: \n" + mostrar);
      }

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
public void leer(int cadena[]) {
       String mostrar="";
    for(int posicion=0;posicion<cadena.length;posicion++) {
        String temp =JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n");
        //comprobamos que el valor ingresado sea distinto que null y si es null
        // regresa al menu principal menu();
        if(temp!= null){
        //asigno que el valor de cadena[posicion] sea igual a lo que tiene temp, pero da error de incompatibilidad de datos.
        cadena[posicion] = temp;
        mostrar=mostrar+cadena[posicion]+"\n";
        //regresamos al menu principal
        }else
        menu();
      }
        JOptionPane.showMessageDialog(null, "Los valores introducidos fueron: \n" + mostrar);
      }
 

Lo que he tratado es que en vez de:

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

poner:

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

De esa manera se quita el error en:

Código
cadena[posicion]=temp;

pero me muestra un error en:

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

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« Respuesta #13 en: 1 Enero 2010, 04:49 »

se me acaba de ocurrir dos cosas:

1.- editar el archivo Integer.java en la linea 417 donde dice:
Código
        if (s == null) {
           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?
En línea
camaleon123

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Valor no Iniciallizado en Arrays (cadenas) dentro de un Switch
« Respuesta #14 en: 1 Enero 2010, 05:23 »

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
public void leer(int cadena[]) {
       String mostrar="";
    for(int posicion=0;posicion<cadena.length;posicion++) {
        String temp = JOptionPane.showInputDialog(null, "Ingresa 5 valores: \n");
        //comprobamos que el valor ingresado sea distinto que null y si es null
        // regresa al menu principal menu();
        if(temp!= null){
 
        int temp2=Integer.parseInt(temp);
 
        cadena[posicion] = temp2;
 
        mostrar=mostrar+cadena[posicion]+"\n";
        //regresamos al menu principal
        }else
        menu();
      }
        JOptionPane.showMessageDialog(null, "Los valores introducidos fueron: \n" + mostrar);
      }
 
« Última modificación: 1 Enero 2010, 05:31 por camaleon123 » En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con arrays dentro de arrays
PHP
Servia 11 1,953 Último mensaje 10 Marzo 2011, 09:04
por Servia
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines