gentoo linux, java, software libre y otras hierbas
dic, 05 2007 - 12:45 pm

[código] Arreglos (arrays) en Java (1)

Los arreglos en Java son objetos, demostrando el compromiso de Java con la orientación a objetos. En esta sección se encuentran diversos ejemplos de arreglos unidimensionales y multidimensionales, y se exponen las manipulaciones más comunes de estos. También el proceso de pasar arreglos a métodos y las técnicas elementales para ordenar y realizar búsquedas, junto con la presentación de la búsqueda binaria como una mejora sobre la búsqueda lineal. Veámos algunos ejemplos:

Creación de un arreglo

// Creación de un arreglo.
import javax.swing.*;

public class InicArreglo {

   public static void main( String args[] )
   {
      int arreglo[];            // declarar la referencia a un arreglo

      arreglo = new int[ 10 ];  // crear el arreglo

      String salida = "Índice\tValor\n";

      // anexar el valor de cada elemento del arreglo al String salida
      for ( int contador = 0; contador < arreglo.length; contador++ )
         salida += contador + "\t" + arreglo[ contador ] + "\n";

      JTextArea areaSalida = new JTextArea();
      areaSalida.setText( salida );

      JOptionPane.showMessageDialog( null, areaSalida,
         "Inicialización de un arreglo de valores int",
         JOptionPane.INFORMATION_MESSAGE );

      System.exit( 0 );

   } // fin de main

} // fin de la clase InicArreglo

Descargar código fuente

Inicialización de un arreglo con los enteros pares del 2 al 20

// Inicialización de un arreglo con los enteros pares del 2 al 20.
import javax.swing.*;

public class Inic2Arreglo {

   public static void main( String args[] )
   {
      final int LONGITUD_ARREGLO = 10;    // constante
      int arreglo[];                    // referencia a un arreglo int

      arreglo = new int[ LONGITUD_ARREGLO ];  // crear el arreglo

      // calcular el valor para cada elemento del arreglo
      for ( int contador = 0; contador < arreglo.length; contador++ )
         arreglo[ contador ] = 2 + 2 * contador;

      String salida = "Índice\tValor\n";

      for ( int contador = 0; contador < arreglo.length; contador++ )
         salida += contador + "\t" + arreglo[ contador ] + "\n";

      JTextArea areaSalida = new JTextArea();
      areaSalida.setText( salida );

      JOptionPane.showMessageDialog( null, areaSalida,
         "Inicialización con enteros pares del 2 al 20",
         JOptionPane.INFORMATION_MESSAGE );

      System.exit( 0 );

   } // fin de main

} // fin de la clase InicArreglo

Descargar código fuente

Sumar el total de los valores de los elementos de un arreglo

// Sumar el total de los valores de los elementos de un arreglo.
import javax.swing.*;

public class SumarArreglo {

   public static void main( String args[] )
   {
      int arreglo[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
      int total = 0;

      // sumar el valor de cada elemento al total
      for ( int contador = 0; contador < arreglo.length; contador++ )
         total += arreglo[ contador ];

      JOptionPane.showMessageDialog( null,
         "Total de elementos del arreglo: " + total,
         "Sumar los elementos de un arreglo",
         JOptionPane.INFORMATION_MESSAGE );

      System.exit( 0 );

   } // fin de main

} // fin de la clase SumarArreglo

Descargar código fuente

Programa para imprimir histogramas

// Programa para imprimir histogramas.
import javax.swing.*;

public class Histograma {

   public static void main( String args[] )
   {
      int arreglo[] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };

      String salida = "Elemento\tValor\tHistograma";

      // para cada elemento del arreglo, mostrar una barra en el histograma
      for ( int contador = 0; contador < arreglo.length; contador++ ) {
         salida += "\n" + contador + "\t" + arreglo[ contador ] + "\t";

         // imprimir barra de asteriscos
         for ( int estrellas = 0; estrellas < arreglo[ contador ]; estrellas++ )
            salida += "*";

      } // fin de instrucción for externa

      JTextArea areaSalida = new JTextArea();
      areaSalida.setText( salida );

      JOptionPane.showMessageDialog( null, areaSalida,
         "Programa para imprimir histogramas", JOptionPane.INFORMATION_MESSAGE );

      System.exit( 0 );

   } // fin de main

} // fin de la clase Histograma

Descargar código fuente

Simulación del lanzamiento de una dado utilizando arreglos

// Tirar un dado de seis lados 6000 veces.
import javax.swing.*;

public class TirarDadoArr {

   public static void main( String args[] )
   {
      int frecuencia[] = new int[ 7 ];

      // tirar un dado 6000 veces; usar el valor del dado como índice de frecuencia
      for ( int tiro = 1; tiro <= 6000; tiro++ )
         ++frecuencia[ 1 + ( int ) ( Math.random() * 6 ) ];  

      String salida = "Cara\tFrecuencia";

      // anexar frecuencias al String salida
      for ( int cara = 1; cara < frecuencia.length; cara++ )
         salida += "\n" + cara + "\t" + frecuencia[ cara ];

      JTextArea areaSalida = new JTextArea();
      areaSalida.setText( salida );

      JOptionPane.showMessageDialog( null, areaSalida,
         "Tirar un dado 6000 veces", JOptionPane.INFORMATION_MESSAGE );

      System.exit( 0 );

   } // fin de main

} // fin de la clase TirarDado

Descargar código fuente

Simulación de votación de estudiantes utilizando arreglos

// Programa de votación de los estudiantes.
import javax.swing.*;

public class VotacionEstudiantes {

   public static void main( String args[] )
   {
      int respuestas[] = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6,
         10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7, 5, 6, 6, 5, 6, 7, 5, 6,
         4, 8, 6, 8, 10 };
      int frecuencia[] = new int[ 11 ];

      // para cada respuesta, seleccionar el elemento de respuestas y usar ese valor
      // como índice en frecuencia para determinar el elemento a incrementar
      for ( int respuesta = 0; respuesta < respuestas.length; respuesta++ )
         ++frecuencia[ respuestas[ respuesta ] ];

      String salida = "Calificación\tFrecuencia\n";

      // anexar frecuencias al String salida
      for ( int calificacion = 1; calificacion < frecuencia.length; calificacion++ )
         salida += calificacion + "\t" + frecuencia[ calificacion ] + "\n";

      JTextArea areaSalida = new JTextArea();
      areaSalida.setText( salida );

      JOptionPane.showMessageDialog( null, areaSalida,
         "Programa de votación de estudiantes", JOptionPane.INFORMATION_MESSAGE );

      System.exit( 0 );

   } // fin de main

} // fin de la clase VotacionEstudiantes

Descargar código fuente

Los ejercicios utilizados en este post están basados en ejemplos del libro Cómo programar en Java de Deitel, y por lo tanto están bajo la licencia que esta editorial disponga.

158 Comentarios | deja el tuyo

2 enlaces entrantes

156 Comentarios en “[código] Arreglos (arrays) en Java (1)”

  1. Cristian dice:

    Hola Aida,

    Sí es posible. Tienes dos opciones:

    * Creas un arreglo tipo Object en el que metes esos tipos de datos.
    * O mejor aún, utilizas la clase Vector que te permite almacenar objetos de cualquier tipo.

    Un saludo!

  2. Aida-KmiZ dice:

    Hola Cistian…
    grax po la respuesta..oye… he estado investigando algunas cosas en la ineternet, y bueno aprovchando tu respuesta….mmm cual es la sintaxis para crear arreglos de tipo object y bueno cual es la sintaxis para usar la clase Vector como le hago!!!!
    :(
    :(
    agradecere tu ayuda!!

  3. Cristian dice:

    Siento ser algo rudo, pero con la información que hay en este post basta para saber hacerlo.

    Con respecto a lo de usar Vector, hay otros ejemplos aquí mismo o en internet consigues cientos.

    Un saludo!

  4. sAnTI dice:

    ¿Que es eso de inicializar un arreglo? y ¿es indispensable hacerlo ? Por ejemplo:

    JTextField campos[];

    JTextField campos = new JTextField[]

    ¿Falta hacer algo mas?

  5. sANti dice:

    Disculpen.. tengo una inquietud:
    tengo una GUI con un frame que tiene unos campos de texto, de los cuales obtego los datos de ingresa el usuario. Y los creo mediante un arreglo de JTextField. Lo declaro, lo creo en el constructor, pero luego no puedo asignarle valores en un metodo auxiliar de la clase:

    public class GUI {
    JTextField campos[]; // lo declaro
    GUI{
    campos = new JTextField[4]; //lo creo
    for(int i=0;i<campos.length;i++) campos[i] = new JTextField(" ",15); // lo inicializo
    }
    public static void main(String a[]){
    GUI nuevaGUI = new GUI();
    nuevaGUI.show();
    }
    public void borrarCampos(){
    for(int i=0;i<campos.length;i++)
    campos[i].setText(" ");// Esto nunca ocurre ¿por que?
    }
    }

  6. Cristian dice:

    Umm… tal como lo tienes ahí, debería funcionar… yo intentaría depurar el método auxiliar del que hablas. Llénalo de printlns dentro y fuera del for para saber si lo está invocando.

    Si la aplicación no es muy larga o compleja, la puede poner para probarla más detalladamente.

    Un saludo!

  7. sAnTI dice:

    OK.. Gracias , si es muy larga así que pondré un ejemplo muy similar. Se trata de validar una entrada de datos, como un log in. Ingrese su nombre de usuario y contraseña, de clic en el boton. Entonces así tengo mi clase resumidamente, con la misma estructura:

    public class GUI{
    private JTextField campos[];
    private JLabel etiquetas[];
    private JButton boton;

    GUI{
    Maneador manejador = new Manejador();

    campos = new JTextField[2];
    for(int i=0;i<campos.length;i++) campos[i] = new JTextField(15);

    String etiq[] = { "Usuario","Contraseña" };
    etiquetas = new JLabel[2];
    for(int i=0;i<etiquetas.length;i++)
    etiquetas[i] = new JLabel(etiq[i]);

    boton = new JButton("Iniciar Sesion");
    boton.addActionListener(manejador);

    //Omito la parte de agregar al contenedor
    }//fin Constructor
    public static void main(String a[]){
    GUI app = new GUI();
    app.show();
    }//fin main
    private boolean datosInvalidos(){
    boolean invalidos=false;
    for(int i=0;i<campos.length;i++)
    if(campos[i].getText().equals(" ") ) invalidos=true;
    return invalidos;
    }//fin boolean

    private class Manejador implements ActionListener{
    public void actionPerformed(ActionEvent evento){
    if(evento.getSource()==boton){
    if( datosInvalidos() ) System.out.println("Datos Invalidos");
    else{ String u = campos[0].getText();
    String c = campos[1].getText();
    }//fin else

    } //fin if
    } //fin ActionPerfomed
    }// fin Clase interna

    }//Clase

    El problema es que no hace nada en el if del booleano, no aplica el metodo getText() y sigue derecho. ¿no c por qué?

  8. sAnTI dice:

    Jum… el problema estaba en que había declarado el arreglo tipo privado, y la clase interna Manejador, también era privada, entonces ocurría un error de ejecución al no poder acceder a la variable. Se solucionó cambiando: private JTextField campos[] por public JTextField campos[]. Y ya eso es todo.. Cristian gracias por la atención prestada. Saludos!

  9. Ricardo dice:

    buena onda!!!!!!!!!!! esta bueno el aporte???

  10. rodrigo dice:

    tengo una duda tengo una clace que me pide realizar un programa donde usuario solo se ingrese con vocales en un areglo de 10
    -si usuario ingresa caracter no vocal imprimir eeror solo vocales

    A) el programa deve desplegar:
    -deplisge del arreglo
    -numeros de intentos realizados
    -numero de intentos fallidos
    -contar vocales “A” que existe en el arreglo

    me podrian ayudar porfavor
    mi mail es shoma_rapero@hotmail.com

    • Cristian dice:

      Ummm, ¿qué llevas hecho?

      La cosa es que es difícil que te ayudemos si no lo has intentado. Además, si necesitas dudas específicas las debes preguntar en el foro: foro.elhacker.net

      Un saludo!

  11. jovani dice:

    buena imformacion pero q no esos ejemplos son de deitel & deite?

    y felicidades q bueno q aya foros como este gracias

  12. Cristian dice:

    Hola jovani!

    Sí, tienes razón… tal como dice en el cuadro azul abajo del post.

    Un saludo!

  13. jovani dice:

    ok gracias por compartir

  14. samuel dice:

    muchas gracias!!!!
    por el aporte

¡Déjanos tu comentario!