[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
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
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
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
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
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
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





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!
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!!
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!
xevere
¿Que es eso de inicializar un arreglo? y ¿es indispensable hacerlo ? Por ejemplo:
JTextField campos[];
JTextField campos = new JTextField[]
¿Falta hacer algo mas?
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?
}
}
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!
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é?
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!
buena onda!!!!!!!!!!! esta bueno el aporte???
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
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!
buena imformacion pero q no esos ejemplos son de deitel & deite?
y felicidades q bueno q aya foros como este gracias
Hola jovani!
Sí, tienes razón… tal como dice en el cuadro azul abajo del post.
Un saludo!
ok gracias por compartir
muchas gracias!!!!
por el aporte