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