Java – Esercizi sugli array (serie 1)

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() di java.util.Arrays per stampare un array

Elenco esercizi

Soluzioni


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à di true e false

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