← Índex del curs Exercicis

Unitat 3. Arrays i Matrius

Unitat Didàctica 3:

En aquesta unitat aprendràs:

Concepte d'array i organització contigua a la memòria amb accés per índex
Visualització interactiva de lectura i recorregut d'arrays amb el stepper de memòria
Matrius bidimensionals: files, columnes i recorregut amb bucles niats

Estructures de Dades Homogènies: Arrays i Matrius

Fins ara hem emmagatzemat cada valor en una variable independent. Però què passa si hem de processar les notes de 500 estudiants o les coordenades de milers de píxels? Necessitem estructures que puguin guardar múltiples valors de forma organitzada.

1. Arrays: Estructures Homogènies i Contigües

Un array és una estructura de dades de mida fixa que conté una col·lecció d'elements del mateix tipus, emmagatzemats de manera contigua a la memòria.

Els elements s'identifiquen mitjançant un índex que comença sempre des del número 0. La propietat length ens indica quants elements pot contenir.

// Declaració i assignació d'un array de 5 enters int[] nombres = new int[5]; nombres[0] = 10; nombres[1] = 20; IO.println("El primer element és: " + nombres[0]); // 10 IO.println("El segon element és: " + nombres[1]); // 20 IO.println("La longitud de l'array és: " + nombres.length); // 5 // Inicialització directa String[] dies = {"Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres"}; IO.println("El primer dia és: " + dies[0]); // Dilluns IO.println("El segon dia és: " + dies[1]); // Dimarts IO.println("Hi ha " + dies.length + " dies laborables."); // 5

Llegir un array de la consola i imprimir-lo

El següent programa llegeix un array de la consola i el mostra per pantalla.

Observa com llegeix l'array:

  1. Obté la mida de l'array,
  2. Reserva l'espai a la memòria
  3. Utilitza un for per llegir els valors un a un i els guarda a la posició i

Per a imprimir l'array:

  1. Utilitza un for per imprimir, un a un, el valor que hi ha a cada posició i
// llegir l'array int len = Integer.parseInt(IO.readln()); int[] array = new int[len]; for (int i = 0; i < array.length; i++) { array[i] = Integer.parseInt(IO.readln()); } // imprimir l'array for (int i = 0; i < array.length; i++) { IO.println(array[i]); }

El mateix exemple amb un array d'Strings:

Observa:

// llegir l'array int len = Integer.parseInt(IO.readln()); String[] array = new String[len]; for (int i = 0; i < array.length; i++) { array[i] = IO.readln(); } // imprimir l'array for (int i = 0; i < array.length; i++) { IO.println(array[i]); }

2. Matrius Bidimensionals (Arrays 2D)

Una matriu és un array d'arrays. Es pot visualitzar com una graella o taula formada per files i columnes, molt útil per representar taulers de joc, imatges o dades tabulades:

// Declaració i assignació d'una matriu de 3 files i 4 columnes int[][] matriu = new int[3][4]; // 3 files x 4 columnes matriu[0][0] = 10; // Fila 0, columna 0 matriu[0][1] = 20; // Fila 0, columna 1 IO.println("La fila 0, columna 0 és: " + matriu[0][0]); // 10 IO.println("La fila 0, columna 1 és: " + matriu[0][1]); // 20 IO.println("La matriu té " + matriu.length + " files."); // 3 IO.println("La primera fila té " + matriu[0].length + " columnes."); // 4 // Inicialització directa String[][] taula = { {"Nom", "Edat", "Ciutat"}, {"Anna", "25", "Barcelona"}, {"Joan", "30", "Madrid"} }; IO.println("La fila 0, columna 0 és: " + taula[0][0]); // Nom IO.println("La fila 1, columna 0 és: " + taula[1][0]); // Anna IO.println("La taula té " + taula.length + " files."); // 3 IO.println("La primera fila té " + taula[0].length + " columnes."); // 3

Llegir una matriu de la consola i imprimir-la

El següent codi mostra com llegir una matriu de la consola i imprimir-la com una taula:

Observa com el bucle extern recorre les files i el bucle intern recorre les columnes de cada fila.

// llegir la matriu int rows = Integer.parseInt(IO.readln()); int cols = Integer.parseInt(IO.readln()); int[][] matriu = new int[rows][cols]; // files x columnes for (int i = 0; i < matriu.length; i++) { for (int j = 0; j < matriu[i].length; j++) { matriu[i][j] = Integer.parseInt(IO.readln()); } } // imprimir la matriu com una taula for (int i = 0; i < matriu.length; i++) { for (int j = 0; j < matriu[i].length; j++) { IO.print(matriu[i][j] + " "); } IO.println(); }

3. ArrayIndexOutOfBoundsException

Una ArrayIndexOutOfBoundsException es produeix quan intentes accedir a un índex d'una matriu que no existeix. Per exemple, si una matriu té 3 files, intentar accedir a la fila 3 (que està fora de límits) llençarà aquesta excepció.

Exemple d'ArrayIndexOutOfBoundsException
int[] numeros = new int[5]; IO.println(numeros[5]); // aioobe numeros[5] = 743; // aioobe

Exercicis Pràctics i Qüestionaris

Posa a prova el que has après completant els qüestionaris interactius auto-avaluables i els reptes de programació.

Exercicis