Questo articolo propone una serie di 12 esercizi sugli array in Java che possono essere molto utili per chi sta studiando il linguaggio Java. Al fondo dell’articolo è disponibile un file zip contenente le “mie” soluzioni.
Si richiede di implementare ciascun metodo indicato in una classe a sé stante e di predisporre il classico public static void main(String[])
per “esercitare” il metodo implementato usando vari input (a scelta e/o quelli di esempio) e infine stampare ciascun risultato. Si possono eventualmente fare dei metodi aggiuntivi per non ripetere più volte la logica di prova e stampa.
Ai fini della esercitazione:
- Non è necessario/richiesto chiedere all’utente qualcosa in “input”
- Non è necessario/richiesto verificare che un array in argomento sia
null
- Non è lecito utilizzare le “collezioni” (del framework standard o di altra libreria)
- È lecito usare i metodi
toString()
dijava.util.Arrays
per stampare un array
Elenco esercizi
- Esercizio 01 – Rotazione in avanti di un array int[]
- Esercizio 02 – Scambio delle due metà in un array int[]
- Esercizio 03 – Concatenazione di due array int[]
- Esercizio 04 – Determinazione valore più frequente in un array boolean[]
- Esercizio 05 – Verifica ordinamento crescente o decrescente in un array int[]
- Esercizio 06 – Compattamento numeri pari e dispari in un array int[]
- Esercizio 07 – Trovare le posizioni con valore massimo in un array int[]
- Esercizio 08 – Verifica valori tutti multipli del valore minimo in un array int[]
- Esercizio 09 – Trovare primo valore che si ripete almeno 2 volte in un array int[]
- Esercizio 10 – Conteggio dei valori in comune tra due array int[]
- Esercizio 11 – Trovare coppia di valori con somma 0 in un array int[]
- Esercizio 12 – Eliminazione dei valori minimo e massimo di un array int[]
Esercizio 01 – Rotazione in avanti di un array int[]
Realizzare il seguente metodo:
public static void ruotaAvanti(int[] array)
Il metodo deve modificare l’array ricevuto in ingresso facendo “ruotare” in avanti di una posizione tutti i valori. L’ultimo valore dovrà quindi essere spostato all’inizio dell’array.
Esempi:
array (prima) |
array (dopo) |
---|---|
{ 4, 9 } |
{ 9, 4 } |
{ 4, 9, 3 } |
{ 3, 4, 9 } |
{ 4, 9, 3, 7 } |
{ 7, 4, 9, 3 } |
Esercizio 02 – Scambio delle due metà in un array int[]
Realizzare il seguente metodo:
public static void scambiaMeta(int[] array)
Il metodo deve modificare l’array ricevuto in ingresso scambiando la prima e la seconda metà dell’array. I valori in ciascuna metà devono mantenere l’ordine originale. Se un array ha lunghezza dispari, il valore centrale deve rimanere inalterato al suo posto.
Esempi:
array (prima) |
array (dopo) |
---|---|
{ 2, 3, 4, 7, 8, 9 } |
{ 7, 8, 9, 2, 3, 4 } |
{ 4, 2, 6, 5, 3, 3, 9 } |
{ 3, 3, 9, 5, 4, 2, 6 } |
Esercizio 03 – Concatenazione di due array int[]
Realizzare il seguente metodo:
public static int[] concatenaArray(int[] array1, int[] array2)
Il metodo deve restituire un nuovo array della “giusta” e corretta dimensione che contiene la concatenazione dei due array in ingresso.
Esempi:
array1 |
array2 |
Risultato |
---|---|---|
{ 12, 7 } |
{ } |
{ 12, 7 } |
{ 12, 7 } |
{ 10, 5, 16 } |
{ 12, 7, 10, 5, 16 } |
{ } |
{ 10, 5, 16 } |
{ 10, 5, 16 } |
Esercizio 04 – Determinazione valore più frequente in un array boolean[]
Realizzare il seguente metodo:
public static Boolean valorePiuFrequente(boolean[] array)
Il metodo deve determinare quale è il valore true
o false
che è più “frequente” all’interno dell’array e restituire come tipo java.lang.Boolean
uno dei seguenti valori:
true
se il valore più frequente ètrue
false
se il valore più frequente èfalse
null
se l’array è “vuoto” (lunghezza 0) o se contiene la stessa quantità ditrue
efalse
Esempi:
array |
Risultato |
---|---|
{ false, true, false, true, true } |
true |
{ false, true, false } |
false |
{ false, true, false, true } |
null |
{ } |
null |
Esercizio 05 – Verifica ordinamento crescente o decrescente in un array int[]
Realizzare il seguente metodo:
public static int verificaOrdinamento(int[] array)
Il metodo deve verificare se il contenuto dell’array è ordinato in maniera “crescente”, “decrescente” o indefinita. Il valore restituito dal metodo dovrà essere: 1
(=crescente), -1
(=decrescente) oppure 0
(=indefinito, nessun ordinamento o array “vuoto”).
Esempi:
array |
Risultato | |
---|---|---|
{ 7, 7 } |
0 |
(indefinito) |
{ 3, 5, 5, 8, 10 } |
1 |
(crescente) |
{ 16, 16, 11, 9, 9, 6 } |
-1 |
(decrescente) |
{ 3, 5, 6, 4, 8 } |
0 |
(indefinito) |
Esercizio 06 – Compattamento numeri pari e dispari in un array int[]
Realizzare il seguente metodo:
public static int[] compattaPariDispari(int[] array)
Il metodo deve restituire un nuovo array che contiene prima tutti i valori pari e poi tutti i valori dispari dell’array in ingresso, mantenendo lo stesso ordine con cui i valori pari e i valori dispari sono disposti.
Esempi:
array |
Risultato |
---|---|
{ 9, 5, 4, 8, 2 } |
{ 4, 8, 2, 9, 5 } |
{ 3, 2, 7, 9, 4, 8, 5 } |
{ 2, 4, 8, 3, 7, 9, 5 } |
Esercizio 07 – Trovare le posizioni con valore massimo in un array int[]
Realizzare il seguente metodo:
public static int[] trovaPosizioniMassimo(int[] array)
Il metodo deve restituire un nuovo array che contiene le posizioni (indici) degli elementi con valore massimo. Il valore massimo può trovarsi infatti anche in più posizioni all’interno dell’array.
Esempi:
array |
Risultato |
---|---|
{ 4, 2, 6, 5 } |
{ 2 } |
{ 2, 9, 4, 3, 9, 5 } |
{ 1, 4 } |
{ 7, 2, 7, 5, 1, 7 } |
{ 0, 2, 5 } |
Esercizio 08 – Verifica valori tutti multipli del valore minimo in un array int[]
Realizzare il seguente metodo:
public static boolean verificaTuttiMultipliMinimo(int[] array)
Il metodo deve determinare se tutti i valori dell’array in ingresso sono multipli del valore minimo presente nell’array, escludendo il valore minimo stesso. Se la condizione è questa, il metodo deve restituire true
, altrimenti false
. Se l’array fosse “vuoto” (lunghezza 0), restituire false
.
Esempi:
array |
Risultato | |
---|---|---|
{ 6, 3, 13, 18, 9 } |
false |
(13 non è multiplo di 3) |
{ 14, 35, 7, 63, 50 } |
false |
(50 non è multiplo di 7) |
{ 15, 45, 100, 5, 60 } |
true |
(tutti i valori sono multipli di 5) |
Esercizio 09 – Trovare primo valore che si ripete almeno 2 volte in un array int[]
Realizzare il seguente metodo:
public static Integer trovaValoreRipetuto(int[] array)
Il metodo deve restituire come java.lang.Integer
il primo valore int
presente nell’array che si ripete almeno 2 volte. Se non esiste alcun valore ripetuto almeno 2 volte o se l’array fosse “vuoto” (lunghezza 0), il metodo deve restituire null
.
Esempi:
array |
Risultato |
---|---|
{ 4, 8, 2, 1, 9 } |
null |
{ 3, 4, 9, 5, 4, 7 } |
4 |
{ 8, 5, 1, 6, 1, 3, 6, 1 } |
1 |
Esercizio 10 – Conteggio dei valori in comune tra due array int[]
Realizzare il seguente metodo:
public static int contaValoriComuni(int[] array1, int[] array2)
Il metodo deve determinare quanti valori in comune ci sono tra i due array in ingresso, ovvero quei valori che si trovano in entrambi gli array. All’interno di ciascuno dei due array un certo valore può eventualmente ripetersi più volte ma deve essere considerato come un singolo valore (non deve essere conteggiato più volte).
Esempi:
array1 |
array2 |
Risultato | |
---|---|---|---|
{ 4, 7, 12, 7, 5 } |
{ 9, 3, 2, 11, 3 } |
0 |
|
{ 2, 13, 6, 2, 6 } |
{ 1, 5, 7, 2, 9 } |
1 |
(per il 2) |
{ 6, 10, 4, 3, 4 } |
{ 4, 8, 10, 5, 10 } |
2 |
(per il 4 e 10) |
Esercizio 11 – Trovare coppia di valori con somma 0 in un array int[]
Realizzare il seguente metodo:
public static int[] trovaCoppiaSommaZero(int[] array)
Il metodo deve verificare se esiste una coppia di valori (contigui oppure no) la cui somma sia 0. Se esiste tale coppia (la prima trovata), deve essere restituita in un array di esattamente 2 elementi. Se non esiste, deve essere restituito un array “vuoto” (lunghezza 0).
Esempi:
array |
Risultato |
---|---|
{ 5, -2, 9, -7 } |
{} |
{ 6, -4, 4, -3, 5 } |
{ -4, 4 } |
{ -9, 7, -6, -8, 6, -7 } |
{ 7, -7 } |
Esercizio 12 – Eliminazione dei valori minimo e massimo di un array int[]
Realizzare il seguente metodo:
public static int[] eliminaMinimoMassimo(int[] array)
Il metodo deve restituire un nuovo array che contiene tutti i valori dell’array in ingresso escludendo però i valori minimo e massimo (che possono ripetersi anche più volte nell’array).
Esempi:
array |
Risultato | |
---|---|---|
{ 8, 16, 5, 6, 12, 5, 10, 5, 16, 9 } |
{ 8, 6, 12, 10, 9 } |
(5 e 16 eliminati) |
{ 3, 10, 4, 10, 8, 5, 2 } |
{ 3, 4, 8, 5 } |
(2 e 10 eliminati) |
{ 3, 8, 6, 3, 6, 3, 3, 8 } |
{ 6, 6 } |
(3 e 8 eliminati) |
Soluzioni
java-esercizi-array-serie-1-soluzioni.zip (aggiornato al 08/09/2019)
Nota: i file sorgente .java
sono codificati in UTF-8, quindi è necessario impostare appropriatamente un editor/IDE per visualizzarli correttamente e se si compila “a mano” con un JDK è necessario (per sicurezza) lanciare es.:
javac -encoding UTF-8 Esercizio01RotazioneAvanti.java