Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - camaleon123

#1
Java / Arrays bidimensionales en un JText
11 Marzo 2010, 04:44 AM
Hola amigos, estoy haciendo arrays unidimensionales ( int matriz[][]=new int[4][4]; )

y siempre he usado el JOptionPane.showMessageDialog para todos mis mensajes ya que he aprendido y me ha gustado usar el JOptionPane en vez del System.outPrint.

Estoy trabajando con arrays bidimensionales y por medio de programacion orientada a objetas y la manera en que me aparece no me gusta, porque aparece todo horizontal o todo vertical, porque uso el siguiente codigo para mostrar los datos:

Código (java) [Seleccionar]

public static void ver(int matriz[][], int horizontal, int vertical)//aqui recibo los valores enviados desde el case en mismo orden
    {
        String valor=""; //necesario para concatenar los resultados
        for(int filas=0;filas<horizontal;filas++)//me sirve para moverme horizontalmente en las filas
            for(int columnas=0;columnas<vertical;columnas++)//me sirve para moverme verticalmente en las columnas
                valor = valor + matriz[filas][columnas] + "\n";//concateno el resultado
        JOptionPane.showMessageDialog(null,"Los valores en la Matriz son: \n" +valor); //muestro la matriz
    }


Como pueden ver, ahi solo me muestra de manera vertical.

He buscado en varios sitios en español e ingles sobre JText pero no puedo realizar que me muestre el array bidimensional con columnas y filas, como puedo hacerlo?

He intentado algo corto sin metodos para poder realizarlo con JText pero no me sale nada bien, muestra caracteres malos, este es lo que tengo:

Código (java) [Seleccionar]


import javax.swing.JOptionPane;
import javax.swing.JTextArea;

public class jtext
{
    public static void main(String arg[])
    {
        int matriz[][]=new int[3][3];

        String datos="";
        for(int fila=0;fila<matriz.length;fila++)
            for(int columna=0;columna<matriz.length;columna++)
            {
                matriz[fila][columna]=Integer.parseInt(JOptionPane.showInputDialog(null,"Da un valor:"));
                datos=datos+matriz[fila][columna]+"\n";
            }
        JTextArea salida = new JTextArea();
        salida.setText("La cadena es: \n"+datos);
        //salida.append(datos); //tampoco funciona
        JOptionPane.showMessageDialog(null, "La matriz es: \n" +salida);
    }
}


Como uso JText para poder mostrar mi array con JOptionPane las filas y columnas?
#2
Java / Explicacion de un simple ejercicio
6 Enero 2010, 05:44 AM
Hola que tal a todos Feliz Añoo!

Estoy editando un codigo de un ejercicio que no pude hacer y que luego me ayudaron proporcionandome el codigo que si corria bien sin errores (cuestion simple que no podia hacer :S), pero hay una parte del codigo que me gustaria que alguien del foro me explique cual es su funcion. Para empezar el programa es:

Código (java) [Seleccionar]

package uni;

import javax.swing.*;

public class arrays_bisiestos
{
   static int bisiestos[];

   public static void main(String arg[])
   {
       int tamano;
       int opciones;

       JOptionPane.showMessageDialog(null, "Este programa crea un arreglo del tamaño de tu gusto, \n " +
               "donde almacenará valores entre los años 1980 y 2010. \n " +
               "Para continuar da click en Aceptar");

       tamano=Integer.parseInt(JOptionPane.showInputDialog(null,"Introduce el total de número de años que deseas introducir para el arreglo: "));

       int arreglo1[]=new int[tamano];

       arrays_bisiestos.lectura(arreglo1);

       do
       {
           opciones=Integer.parseInt(JOptionPane.showInputDialog(null, "Escoge la opción de tu gusto: \n" +
                   "1) Para ver el arreglo de años que has introducido. \n " +
                   "2) Para visualizar cuales de los años que has introducido son años bisiestos. \n " +
                   "3) Para visualizar ambos datos, el total de años introducido por ti y los años bisiestos. \n " +
                   "4) Escribe para 4 para salir"));

           switch(opciones)
           {
               case 1: arrays_bisiestos.ver_arreglo(arreglo1);
               break;

               case 2: arrays_bisiestos.ver_anosbisiestos(arreglo1, bisiestos);
               break;

               case 3: arrays_bisiestos.ver_ambosarreglos(arreglo1, bisiestos);
               break;

               case 4: JOptionPane.showMessageDialog(null, "Adios");
               break;

               default: JOptionPane.showMessageDialog(null,"Opción Invalida, vuelve a intentarlo");
               break;
           }

       } while(opciones!=4);

   }

   public static void lectura(int arreglo[])
   {

       for (int posicion = 0; posicion < arreglo.length; posicion++)
       {
           arreglo[posicion] = Integer.parseInt(JOptionPane.showInputDialog(null, "Introduzca el año para la posición: " + posicion));

           if(arreglo[posicion] < 1980 || arreglo[posicion] > 2010)
           {
               JOptionPane.showMessageDialog(null,"Solo admito años entre 1980 y 2010, vuelve a intentarlo");
               posicion--;
           }
       }

       String años = "";

       String strAños[];

       for (int posicion = 0; posicion < arreglo.length; posicion++)
       {
           if(arreglo[posicion] % 4 == 0 || arreglo[posicion] % 400 == 0)
           {
               años = años + arreglo[posicion] + (posicion + 1 < arreglo.length ? ";" : "");
           }
       }

       strAños = años.split(";");

       bisiestos = new int[strAños.length];

       for (int posicion = 0; posicion < strAños.length; posicion++)
       {
           bisiestos[posicion] = Integer.parseInt(strAños[posicion]);
       }
   }

   public static void ver_arreglo(int arreglo[])
   {
       String anos="";

       for(int posicion=0;posicion<arreglo.length;posicion++)
           anos=anos+arreglo[posicion]+"\n";

       JOptionPane.showMessageDialog(null,"Los años introducidos fueron: \n" +anos);
   }

   public static void ver_anosbisiestos(int arreglo1[], int bisiestos[]) {

       String años = "";
       for (int posicion = 0; posicion < bisiestos.length; posicion++)
       {
           años = años + bisiestos[posicion] + "\n";
       }

       JOptionPane.showMessageDialog(null, "Los años son: \n" + años);
   }

   public static void ver_ambosarreglos(int arreglo1[], int bisiestos[])
   {
       String anos="";
       String bisiesto="";

       for(int posicion=0;posicion<arreglo1.length;posicion++)
           anos = anos + arreglo1[posicion] + "\n";

       for(int posicion=0;posicion<bisiestos.length;posicion++)
           bisiesto = bisiesto + bisiestos[posicion] + "\n";

       JOptionPane.showMessageDialog(null,"Los años introducidos fueron: \n" +anos + "Los bisiestos fueron: \n" + bisiesto);
   }
}


Como ven el programa crea un array del tamaño que desee el usuario y luego pide los valores, los cuales solo pueden ser entre 1980 y 2010, luego entra el switch, y de ahi se escoge la opcion deseada.

Entiendo a la perfeccion casi todo el codigo, a excepcion de la siguiente parte del metodo lectura, que no entiendo bien:

Código (java) [Seleccionar]

String años = "";

       String strAños[];

       for (int posicion = 0; posicion < arreglo.length; posicion++)
       {
           if(arreglo[posicion] % 4 == 0 || arreglo[posicion] % 400 == 0)
           {
               años = años + arreglo[posicion] + (posicion + 1 < arreglo.length ? ";" : "");
           }
       }

       strAños = años.split(";");

       bisiestos = new int[strAños.length];

       for (int posicion = 0; posicion < strAños.length; posicion++)
       {
           bisiestos[posicion] = Integer.parseInt(strAños[posicion]);
       }


Lo que no entiendo de esa parte es para sirve + (posicion + 1 < arreglo.length ? ";" : ""); de la siguiente linea de codigo :

Código (java) [Seleccionar]

 años = años + arreglo[posicion] + (posicion + 1 < arreglo.length ? ";" : "");


Entiendo que es para concatenar el resultado, pero porque entre parentesis la siguiente linea: (posicion + 1 < arreglo.length ? ";" : "") y para que sirve el signo ? y las comillas y los ; y :

Luego tampoco entiendo para que sirve:
Código (java) [Seleccionar]
strAños = años.split(";"); para que años.split(";");???

Fuera de eso entiendo a la perfeccion cada linea de codigo. Alguien puede explicarme porfavor??
#3
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"));
       }
}