import java.util.Arrays; public class Esercizio5 { public static int[] flatten(int[][] a) { // Prima conto quanti elementi ci sono in totale, e metto il risultato nella variabile n. int n = 0; for (int[] row : a) n += row.length; // Ora creo un array lungo n, dove mettere gli elementi di a. int[] res = new int[n]; // La variabile pos terrà traccia del prossimo elemento di res da riempire. int pos = 0; // Il primo ciclo scorre le righe di a, il secondo gli elementi di ogni riga. for (int[] row : a) for (int x : row) { // Ogni elemento x viene inserito in res nella posizione pos, e pos viene // incrementato. res[pos] = x; pos++; } return res; } // Questa è una variante di flatten che usa gli indici per accedere agli elementi di a // anziché usare i for-each. Entrambe le soluzioni vanno bene. public static int[] flatten2(int[][] a) { int n = 0; for (int i = 0; i < a.length; i++) n += a[i].length; int[] res = new int[n]; int pos = 0; for (int i=0; i < a.length; i++) for (int j = 0; j < a[i].length; j++) { res[pos] = a[i][j]; pos++; } return res; } // Un semplice main per controllare che flatten funzioni (non è necessario per lo svolgimento // dell'esercizio). public static void main(String[] args) { System.out.println(Arrays.toString(flatten(new int[][] {{1, 2, 3}, {4, 5}, {6}}))); System.out.println(Arrays.toString(flatten2(new int[][] {{1, 2, 3}, {4, 5}, {6}}))); } }