menu

Arreglos en Java

Los arreglos son estructuras de datos que consisten de elementos de datos relacionados del mismo tipo. Los arreglos son entidades de longitud fija; conservan la misma longitud una vez creados, aunque puede reasignarse una variable tipo arreglo de tal forma que haga referencia a un nuevo arreglo de distinta longitud.


Entonces un arreglo es un grupo de variables que contienen valores todos del mismo tipo. Para hacer referencia a un elemento específico en un arreglo, debemos especificar el nombre de la referencia al arreglo y el número de la posición del elemento en el arreglo. El número de la posición del elemento se conoce formalmente como el índice o subíndice del elemento.


En la Figura 1 tenemos un arreglo de 6 posiciones. Se puede hacer referencia a cualquiera de estos elementos mediante una expresión de acceso a un arreglo que incluye el nombre del arreglo, seguido por el índice del elemento específico encerrado entre corchetes ([]). El primer elemento en cualquier arreglo tiene el índice cero, en la Figura 1 el elemento 0 tiene el valor de 44 y el elemento 1 el valor 23.


Figura 1
Cada instancia de un objeto conoce su propia longitud y mantiene esta información en un campo length.
int longitud = a.length; //la variable 'longitud' tiene el valor de 6.
La expresión a.length accede al campo length del arreglo 'a' para determinar la longitud del arreglo.

Declaración y creación de arreglos


Los objetos arreglo ocupan espacio en memoria. Al igual que los demás objetos, los arreglos se crean con la palabra clave new. Para crear un objeto arreglo, se especifica el tipo de cada elemento y el número de elementos que se requieren para el arreglo, como parte de una expresión para crear un arreglo que utiliza la palabra clave new.


La siguiente declaración y expresión crea un objeto arreglo, que contiene 6 elementos int, y almacena la referencia del arreglo en la variable a:


int a[] = new int[ 6 ];

Declarar varios arreglos en una sola sentencia
int a[] = new int[ 6 ], b[] = new int[3], c[] = new int[15];


Ejemplo00:


 
package com.estructuras.matrices;

public class Ejemplo00 {
    public static void main(String[] argumentos){
        
        //arreglo vacio de diez elementos llamado 'a' de tipo entero (int)
        int[] a = new int[10];
          
        for(int indice = 0; indice < a.length; indice++){
            System.out.println("a["+indice+"] = "+a[indice]);
        }
        
    }
}
salida consola



Ejemplo01:


Un programa puede crear un arreglo e inicializar sus elementos con un inicializador de arreglo, que es una lista de expresiones separadas por comas (la cual se conoce también como lista inicializadora) encerrada entre llaves ({ y }); la longitud del arreglo se determina en base al número de elementos en la lista inicializadora.


public class Ejemplo01 {
    public static void main(String[] argumentos){
        
        //inicializar un arreglo de diez elementos llamado 'b' con valores de tipo entero(int)
        int[] b = { 2, 4, 6, 12, 33, 44, 9, 43, 2, 1 };
        
        for(int indice = 0; indice < b.length; indice++){
            System.out.println("b["+indice+"] = "+b[indice]);
        }
        
    }
}
salida consola

Ejemplo02:


La aplicación crea un arreglo de 7 elementos y asigna a cada elemento uno de los enteros pares del 2 al 14. La instrucción for en las líneas 12 y 13 calcula el valor de un elemento del arreglo, multiplicando el valor actual de la variable de control indice por 2, y después le suma 2.


public class Ejercicio02 {
    public static void main(String[] args){
        //Creamos una constante
        final int LONGITUD_ARREGLO = 7;
        //Creamos el Arreglo
        int arreglo[] = new int[LONGITUD_ARREGLO];
        
        //calcular el valor para cada elemento del arreglo
        for(int indice = 0; indice < arreglo.length; indice++){
            arreglo[indice] = 2 + 2 * indice;
        }
        
        //imprimir el valor de cada elemento del arreglo
        for(int indice = 0; indice < arreglo.length; indice++){
            System.out.println("arreglo["+indice+"] = "+arreglo[indice]);
        }
    }
}   

Ejemplo03:

A menudo, los elementos de un arreglo representan una serie de valores que se emplearán en un cálculo. Por ejemplo, si los elementos del arreglo representan las calificaciones de un examen, tal vez el profesor desee sumar el total de los elementos del arreglo y utilizar esa suma para calcular el promedio de la clase para el examen.


public class Ejemplo03 {
    public static void main(String[] args){
        
        int[] notas = {12, 11, 14, 9, 19, 2, 3, 12, 10, 20};
        int sumaTotalNotas = 0;
        
        for(int indice = 0; indice < notas.length; indice++){
            sumaTotalNotas += notas[indice];
        }
        
        System.out.println("PROMEDIO DE NOTAS: "+ sumaTotalNotas/notas.length);
    }
}

/**
 * Salida en Consola
 * "PROMEDIO DE NOTAS: 11"
 */

Ejemplo04:

A los profesores les gusta examinar a menudo la distribución de las calificaciones en un examen. Un profesor podría graficar el número de calificaciones en cada una de varias categorías, para visualizar la distribución de las calificaciones. Suponga que las calificaciones en un examen fueron 87, 68, 94, 100, 83, 78, 85, 91, 76 y 87. Observe que hubo una calificación de 100, dos calificaciones en el rango de 90 a 99, cuatro calificaciones en el rango de 80 a 89, dos en el rango de 70 a 79, una en el rango de 60 a 69 y ninguna por debajo de 60. Nuestra siguiente aplicación almacena estos datos de distribución de las calificaciones en un arreglo de 11 elementos, cada uno de los cuales corresponde a una categoría de calificaciones. Por ejemplo, arreglo[ 0 ] indica el número de calificaciones en el rango de 0 a 9, arreglo[ 7 ] indica el número de calificaciones en el rango de 70 a 79 y arreglo[ 10 ] indica el número de calificaciones de 100.


public class Ejemplo04 {
    public static void main(String[] args){
        
        int[] arreglo = {0, 0, 0, 0, 0, 0, 1, 2, 4, 2 ,1};
        
        System.out.println("DISTRIBUCION DE CALIFICACIONES");
        
        //Para cada elemento del arreglo, imprime una barra del grafico
        for(int contador = 0; contador < arreglo.length; contador++){
            
            //imprime etiqueta de la barra ("00-09: ", ..., "90-99: ", "100: ")
            if(contador == 10){
                System.out.printf("%5d: ", 100);
            }else{
                System.out.printf("%02d-%02d: ", contador * 10, contador * 10 + 9);
            }
            
            //imprime barra de asteriscos
            for(int asteriscos = 0; asteriscos < arreglo[contador]; asteriscos++){
                System.out.print("*");
            }
            
            System.out.println();//Inicia una nueva linea de salida
        }
    }
}
salida consola

La aplicación lee los números del arreglo y grafica la información en forma de un gráfico de barras. El programa muestra cada rango de calificaciones seguido de una barra de asteriscos, que indican el número de calificaciones en ese rango. Para etiquetar cada barra, las líneas 12 a 16 imprimen un rango de calificaciones (por ejemplo, "70-79: ") con base en el valor actual de contador. Cuando contador es 10, la línea 12 imprime 100 con una anchura de campo de 5, seguida de dos puntos y un espacio, para alinear la etiqueta "100: " con las otras etiquetas de las barras. La instrucción for anidada (líneas 19 y 21) imprime las barras en pantalla. Observe la condición de continuación de ciclo en la línea 19 (estrellas < arreglo[ contador ]). Cada vez que el programa llega al for interno, el ciclo cuenta desde 0 hasta arreglo[ contador ], con lo cual utiliza un valor en arreglo para determinar el número de asteriscos a mostrar en pantalla. En este ejemplo, los valores de arreglo[ 0 ] hasta arreglo[ 5 ] son 0, ya que ningún estudiante recibió una calificación menor de 60. Por ende, el programa no muestra asteriscos enseguida de los primeros seis rangos de calificaciones. Observe que la línea 15 utiliza el especificador de formato %02d para imprimir los números en un rango de calificaciones. Este especificador indica que se debe dar formato a un valor int como un campo de dos dígitos. La bandera 0 en el especificador de formato indica que los valores con menos dígitos que la anchura de campo (2) deben empezar con un 0 a la izquierda.

No hay comentarios:

Publicar un comentario