In Java, gli array sono un modo per memorizzare più valori dello stesso tipo in un'unica struttura. A differenza di altre strutture dati, gli array hanno una dimensione fissa una volta creati. Gli elementi possono essere assegnati a un array o recuperati da esso tramite un indice. Gli array in Java usano un'indicizzazione che parte da zero: l'indice del primo elemento è 0, quello del secondo è 1, e così via.
Ecco la sintassi standard per inizializzare un array:
type[] variableName = new type[size];
Il type è il tipo degli elementi dell'array, che può essere un tipo primitivo (ad esempio int) o una classe (ad esempio String).
La size è il numero di elementi che questo array conterrà (e non può essere modificato in seguito).
Dopo la creazione dell'array, gli elementi vengono inizializzati ai loro valori predefiniti (tipicamente 0, false o null).
// Declare array with explicit size (size is 2)
int[] twoInts = new int[2];
Gli array possono anche essere definiti usando una notazione abbreviata che permette sia di creare l'array sia di impostarne i valori:
// Two equivalent ways to declare and initialize an array (size is 3)
int[] threeIntsV1 = new int[] { 4, 9, 7 };
int[] threeIntsV2 = { 4, 9, 7 };
Dato che ora il compilatore può capire quanti elementi avrà l'array, la lunghezza può essere omessa.
Gli elementi di un array possono essere assegnati e letti usando la notazione con l'indice tra parentesi quadre:
// Assign second element by index
twoInts[1] = 8;
// Retrieve the second element by index and assign to the int element
int secondElement = twoInts[1];
Accedere a un indice al di fuori degli indici validi per l'array provoca una IndexOutOfBoundsException.
Gli array possono essere manipolati chiamando i metodi o le proprietà di un'istanza di array, oppure usando i metodi statici definiti nella classe Arrays (tipicamente usati solo nel codice generico).
La proprietà length contiene la lunghezza di un array.
Si può accedere così:
int arrayLength = someArray.length;
Java fornisce anche un'utile classe di utilità java.util.Arrays che ha molti metodi utili relativi agli array (ad esempio Arrays.equals).
Java supporta anche gli array multidimensionali come int[][] arr = new int[3][4];, che possono essere molto utili.
Il fatto che un array sia anche una collezione significa che, oltre ad accedere ai valori tramite indice, puoi iterare su tutti i suoi valori usando un ciclo for-each:
char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
for(char vowel: vowels) {
// Output the vowel
System.out.print(vowel);
}
// => aeiou
Se vuoi avere più controllo su quali valori iterare, puoi usare un ciclo for:
char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
for (int i = 0; i < 3; i++) {
// Output the vowel
System.out.print(vowels[i]);
}
// => aei
Sei un appassionato di birdwatching che tiene traccia di quanti uccelli hanno visitato il tuo giardino negli ultimi sette giorni.
Hai sei compiti, tutti legati al numero di uccelli che hanno visitato il tuo giardino.
Per poter fare dei confronti, tieni sempre a portata di mano una copia dei conteggi della settimana scorsa, che erano: 0, 2, 5, 3, 7, 8 e 4. Implementa il metodo BirdWatcher.getLastWeek() che restituisce i conteggi della settimana scorsa:
BirdWatcher.getLastWeek();
// => [0, 2, 5, 3, 7, 8, 4]
Implementa il metodo BirdWatcher.getToday() per restituire quanti uccelli hanno visitato il tuo giardino oggi. I conteggi degli uccelli sono ordinati per giorno: il primo elemento è il conteggio del giorno più lontano, l'ultimo è il conteggio di oggi.
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getToday();
// => 1
Implementa il metodo BirdWatcher.incrementTodaysCount() per incrementare il conteggio di oggi:
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.incrementTodaysCount();
birdCount.getToday();
// => 2
Implementa il metodo BirdWatcher.hasDayWithoutBirds() che restituisce true se c'è stato un giorno in cui zero uccelli hanno visitato il giardino; altrimenti, restituisce false:
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.hasDayWithoutBirds();
// => true
Implementa il metodo BirdWatcher.getCountForFirstDays() che restituisce il numero di uccelli che hanno visitato il tuo giardino dall'inizio della settimana, ma limita il conteggio al numero di giorni specificato dall'inizio della settimana.
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getCountForFirstDays(4);
// => 14
Alcuni giorni sono più intensi di altri. Un giorno intenso è quello in cui cinque o più uccelli hanno visitato il tuo giardino.
Implementa il metodo BirdWatcher.getBusyDays() per restituire il numero di giorni intensi:
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getBusyDays();
// => 2
Iscriviti a Exercism per imparare e padroneggiare Java con 26 concetti158 esercizi e il mentoring di persone reali, tutto gratis.