Arrays en Java

Índice

Qué es un array

Un array es una estructura de datos que almacena un número fijo de elementos del mismo tipo, a los que se accede mediante un índice numérico. Sus tres rasgos fundamentales son la homogeneidad (todos los elementos son del mismo tipo), el tamaño fijo (se decide al crearlo y no puede cambiar) y el acceso directo por posición, que es inmediato sin importar el tamaño del array, porque Java calcula la dirección del elemento a partir de su índice.

Declaración, creación e inicialización

Son tres pasos distintos, aunque a menudo se escriban juntos:

1
2
3
int[] numeros;              // 1. Declaración: variable que podrá apuntar a un array (aún es null)
numeros = new int[5];       // 2. Creación: se reserva memoria para 5 enteros
numeros[0] = 10;            // 3. Inicialización de un elemento

También se puede hacer todo a la vez, ya sea indicando el tamaño o enumerando los valores directamente:

1
int[] b = {3, 7, 1};                 // el tamaño (3) se deduce de los valores

El tamaño puede venir de una variable calculada en tiempo de ejecución (new int[n]), pero una vez creado el array ya no cambia.

Por ejemplo:

1
2
3
4
5
6
7
8
9
import java.util.Scanner;

public class Array {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int cuantosElementos = sc.nextInt();
        int[] elementos = new int[cuantosElementos];
    }
}

Índices y la propiedad length

Los índices van de 0 a length - 1. Acceder a cualquier otra posición lanza ArrayIndexOutOfBoundsException en tiempo de ejecución; el compilador no lo detecta.

length es un atributo, no un método, por lo que se escribe sin paréntesis: numeros.length. Conviene no confundirlo con String.length(), que sí es un método, ni con ArrayList.size().

Recorrer un array

1
2
3
4
// Empezamos desde la posicion 0 (!cuidado¡)
for (int i = 0; i < arr.length; i++) {
    arr[i] = arr[i] * 2;
}

1 Imprimir array

A partir del código anterior, imprime el contenido del array mediante un bucle for

Piensa antes de mirar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Ejemplo1 {
	public static void main(String[] args) {
		// Declara un array de enteros
		int[] anArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
		// Recorre un array mediante un for
		// Cuidado que empieza en 0 y acaba en anArray.length - 1;
		// Si intentáis acceder a la posición 10 saltará la excepción:
		// Java.lang.ArrayIndexOutOfBoundsException
		for (int i = 0; i < anArray.length; i++) {
			// Y accedemos al valor de la posición iésima
			System.out.println(anArray[i]);
		}
	}
}

2 Orden inverso (F)

(ra3.b, ra3.f, ra5.c, ra6.a)

Realiza un programa que lea 10 números y los muestre en orden inverso

  • primero lee los números con un bucle for y guarda el dato en la posición iésima
  • después, recorre el array de atrás adelante

3 DNI (F)

(ra3.b, ra3.f, ra5.c, ra6.a)

Realiza un programa que lea un DNI sin letra y calcula la misma (usad un array para almacenar las letras) En este enlace se explica cómo se calcula la letra del DNI.

For mejorado para arrays

Una forma de hacer los bucles más compactos para arrays es usar enhanced for

1
2
3
4
5
6
7
8
class EnhancedForDemo {
	public static void main(String[] args){
        int[] numbers = {1,2,3,4,5,6,7,8,9,10};
        for (int item : numbers) {
            System.out.println("Count is: " + item);
        }
    }
}

4 Media de un array (F)

(ra3.b, ra3.f, ra5.c, ra6.a)

Calcula la media de un array de 10 posiciones

5 Máximo (M)

(ra3.a, ra3.b, ra3.f, ra5.c, ra6.a)

Realiza un programa que pida diez números e imprima el mayor

6 Mínimo (M)

(ra3.a, ra3.b, ra3.f, ra5.c, ra6.a)

Realiza un programa que imprima el menor de un array de 10 números

7 Marco con cadenas (M)

(ra3.a, ra3.b, ra3.f, ra5.c, ra6.a)

Escribe una función que recoja una lista de cinco cadenas, una por línea, y las imprima en un marco rectangular. Por ejemplo, la lista [“Hola”, “esto”, “es”, “un”, “marco”]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Scanner;

class Ejemplo7 {
	public static void main(String[] args){
		String[] cadenas = new String[5];
		System.out.println("Introduce 5 cadenas de texto:");
		Scanner miScanner;
        miScanner = new Scanner(System.in);
		
		for (int i = 0; i < cadenas.length; i++){
			cadenas[i] = miScanner.next();
		}
		
		//Realiza aquí tu algoritmo

	}
}

8 Suma positivos y negativos (F)

(ra3.a, ra3.b, ra3.f, ra5.c, ra6.a)

Crea un programa que pida 10 números enteros por teclado, los almacene en un array y luego muestre por separado la suma de todos los valores positivos y negativos.

9 Pares e impares (F)

(ra3.a, ra3.b, ra3.f, ra5.c, ra6.a)

Realiza un programa que calcule cuántos números pares e impares tiene un array.

10 Búsqueda

(ra3.a, ra3.b, ra3.f, ra5.c, ra6.a)

Busca un número en el array e indica en qué posición está, o -1 si no aparece.