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); 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.*; 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.*; Y en el metodo puse: Código: public static void leervalores(int cadena1[], int cadena2[], int x1, int x2) 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 [/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 [/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
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
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
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
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
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.htmlCitar 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
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
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
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
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
Lo que he tratado es que en vez de: Código poner: Código De esa manera se quita el error en: Código
pero me muestra un error en: Código
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 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
|