


























Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
ARGOMENTI: • Ricercare un valore in un Vettore • Ricerca Lineare (o Sequenziale) • Ricerca Binaria • Confronto tra i due algoritmi • Array Bidimensionali o Matrici – concetto e struttura • Come creare una Matrice in Java • Scrittura e lettura di una Matrice • Passaggio di Parametri con Matrice I Tipi di Dati – Concetti Generali I Tipi Semplici (Primitivi) Il Tipo Enumerativo Il Tipo Strutturato Array Strutture Dati – Concetti Generali Array Monodimensionali (Vettori) Come Creare un Vettore Scrittura e Lettura di un Vettore Passaggio di Parametri con Vettore Errore Comune: Copia di un Array Algoritmi di Ordinamento – Concetti Generali Algoritmo Bubble Sort Bubble Sort – Logica, Esempio e Codice Java Algoritmo Insertion Sort Insertion Sort – Logica, Esempio e Codice Java Insertion Sort con Inserimenti Live Confronto tra gli Algoritmi
Tipologia: Schemi e mappe concettuali
1 / 34
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!



























Questo documento presenta una panoramica completa dei tipi di dati nel linguaggio di programmazione Java. Vengono trattati i concetti fondamentali, i tipi semplici (o primitivi), il tipo enumerativo e la struttura dati Array.
Argomento Sezione I Tipi di Dati – Concetti Generali 1 I Tipi Semplici (Primitivi) 2 Il Tipo Enumerativo 3 Il Tipo Strutturato Array 4
1. I Tipi di Dati – Concetti Generali
In generale, i dati sono informazioni rappresentate in una forma tale da poter essere elaborate da un computer. Ogni dato presente in un programma possiede esattamente un tipo, e ogni linguaggio di programmazione offre un insieme di tipi predefiniti.
Un tipo di dato , in informatica, indica l'insieme di valori che una variabile (o il risultato di un'espressione) può assumere, nonché le operazioni che su tali valori è possibile effettuare.
Esempio: se una variabile X è di tipo intero, significa che X può contenere solo numeri interi appartenenti a un determinato intervallo, e che su di essa sono ammesse operazioni aritmetiche elementari (somma, sottrazione, moltiplicazione, ecc.).
Il tipo di dato serve a definire l'insieme dei valori possibili che un dato può assumere e le operazioni che possono essere effettuate con quel tipo di dato.
In Java, come nella maggior parte dei linguaggi di programmazione, esistono tre categorie fondamentali di tipi di dati:
Categoria Descrizione
Tipo Semplice Tipi primitivi non decomponibili (es. int, boolean, char)
Tipo Enumerativo Insieme finito e ordinato di costanti definite dal programmatore
Tipo Strutturato Array Aggregato di più valori dello stesso tipo in una singola variabile
3. Il Tipo Enumerativo
Il tipo enumerativo permette di definire un nuovo tipo di dato che non ha alcun riferimento con gli altri tipi esistenti. Si tratta di un insieme finito e ordinato di costanti con nome, definito dal programmatore.
Senza il tipo enumerativo, si potrebbe gestire un insieme limitato di valori usando costanti intere. Ad esempio, per i giorni della settimana si potrebbero usare costanti intere da 0 a 6. Tuttavia, questo approccio presenta un problema critico: il compilatore non segnala errori se viene assegnato alla variabile un valore intero qualsiasi, anche fuori dall'intervallo previsto. Il tipo enumerativo risolve questo problema a livello di compilazione.
In Java il tipo enumerativo si dichiara usando la parola chiave enum :
public enum Giorno { LUNEDI, MARTEDI, MERCOLEDI, GIOVEDI, VENERDI, SABATO, DOMENICA }
Per dichiarare e assegnare un valore a una variabile di tipo enum si usa la sintassi . :
Giorno giornoDellaSettimana = Giorno.LUNEDI;
Il metodo values() restituisce un array con tutti i valori dell'enum, permettendo di iterarli:
for (Giorno g : Giorno.values()) { System.out.println(g); }
Il metodo valueOf() converte una stringa nel corrispondente valore enum. La stringa deve avere esattamente lo stesso case del valore dichiarato nell'enum, altrimenti viene lanciata una java.lang.IllegalArgumentException.
Giorno g = Giorno.valueOf("DOMENICA"); Attenzione: se l'enum è scritto in maiuscolo, anche la stringa passata a valueOf() deve essere in maiuscolo. In caso contrario Java genererà un errore.
È possibile confrontare valori enum in base alla loro posizione di dichiarazione tramite due metodi:
Questo documento tratta in dettaglio le strutture dati di tipo Array in Java: dalla definizione di struttura dati, agli array monodimensionali (vettori), alla loro dichiarazione, inizializzazione, accesso in lettura e scrittura, passaggio come parametri a metodi e gli errori più comuni da evitare.
Argomento Sezione Strutture Dati – Concetti Generali 1 Array Monodimensionali (Vettori) 2 Come Creare un Vettore 3 Scrittura e Lettura di un Vettore 4 Passaggio di Parametri con Vettore 5 Errore Comune: Copia di un Array 6
1. Strutture Dati – Concetti Generali
Fino a questo punto, nella programmazione di base, si lavora prevalentemente con dati elementari o atomici : un singolo intero, un numero reale, un valore booleano e così via. Tuttavia, molti problemi reali richiedono di gestire insiemi di dati correlati anziché valori isolati.
In molti problemi si ha la necessità di aggregare più dati di tipo semplice, per facilitarne la rappresentazione e rendere più veloce il loro ritrovamento. I dati vengono organizzati in un insieme che prende il nome di Struttura Dati.
Una struttura dati è un modo organizzato di memorizzare e gestire dati in memoria, in modo da poterli elaborare in maniera efficiente. Esistono diverse strutture dati nella programmazione; in questo contesto ne vengono trattate due fondamentali:
Gli Array sono strutture dati, ovvero esempi di dati composti o strutturati. Permettono di trattare un aggregato di dati come un'unica entità.
3. Come Creare un Vettore
In Java un vettore, come qualsiasi altra variabile, deve essere prima dichiarato e poi inizializzato. Questi due passi hanno ruoli distinti.
Informazione Descrizione
Nome della variabile L'identificatore con cui si accede all'array nel codice
Tipo degli elementi Il tipo di dato che ogni cella dell'array conterrà (es. int, double, char...)
Numero di elementi La dimensione dell'array, ovvero quante celle allocare in memoria
La dichiarazione riserva uno spazio in memoria per il riferimento all'array, ma non alloca ancora le celle. Si usa la notazione con le parentesi quadre dopo il tipo:
int[] listaNumeri; Attenzione: la sola dichiarazione NON crea un array reale. La variabile contiene un riferimento non ancora inizializzato (null). Tentare di usarla prima dell'inizializzazione causerà un errore a runtime.
L' inizializzazione crea effettivamente l'array in memoria, allocando il numero di celle specificato. Si usa la parola chiave new seguita dal tipo e dalla dimensione:
int[] listaNumeri = new int[4];
Questo crea un array di 4 celle di tipo int (indici 0, 1, 2, 3). La variabile listaNumeri contiene ora un riferimento (indirizzo di memoria) all'array allocato. I valori iniziali sono 0 per i tipi numerici, false per boolean, null per oggetti.
È possibile inizializzare un array direttamente con i suoi valori, senza specificare esplicitamente la dimensione (viene calcolata automaticamente):
int[] listaNumeri = {12, 35, 44, 3};
4. Scrittura e Lettura di un Vettore
Per accedere ai singoli elementi di un array è necessario specificare il nome della variabile array seguito dall' indice della posizione di interesse tra parentesi quadre. L'indice è un valore intero (costante o variabile).
Gli indici di un array partono sempre da 0. Per un array di N elementi, il primo elemento è all'indice 0 e l'ultimo è all'indice N-1.
Array di N elementi Primo elemento Ultimo elemento Indice non valido N = 4 vett[0] vett[3] vett[4] o vett[-1] N = 10 vett[0] vett[9] vett[10] o vett[-1] N = 100 vett[0] vett[99] vett[100] o vett[-1]
Il controllo della correttezza dell'indice è a carico del programmatore. Non esistono controlli automatici a compile-time: un indice fuori intervallo causa un'eccezione a runtime: ArrayIndexOutOfBoundsException.
Per leggere il valore di un elemento si usa l'indice come accesso diretto:
int vett[] = new int[4]; // Lettura con indice costante int pos3 = vett[2]; // Lettura con indice variabile int indice = 2; int pos3 = vett[indice];
Per scrivere un valore si assegna direttamente alla posizione indicizzata:
int vett[] = new int[4]; vett[0] = 35; // assegna 35 alla posizione 0 int indice = 3; vett[indice] = 12; // assegna 12 alla posizione 3
Per elaborare tutti gli elementi di un array si usa tipicamente un ciclo. La proprietà length dell'array restituisce il numero totale di elementi e viene usata come condizione di uscita.
for (int indice = 0; indice < vett.length; indice++) { System.out.println(vett[indice]); }
5. Passaggio di Parametri con Vettore
In Java il passaggio dei parametri avviene esclusivamente per valore : viene copiato il valore della variabile nell'area di memoria del metodo chiamato. L'originale e la copia sono quindi valori indipendenti.
Quando si passa un array come parametro a un metodo, Java non copia l'intero contenuto dell'array bensì copia il suo riferimento (l'indirizzo di memoria). Di conseguenza, sia la variabile originale nel metodo chiamante sia il parametro nel metodo chiamato puntano al medesimo array in memoria.
Effetto pratico: le modifiche apportate agli elementi dell'array all'interno del metodo chiamato si riflettono sull'array originale nel metodo chiamante. Questo comportamento è equivalente a un passaggio per riferimento.
public static void main(String[] args) { int vett[]; vett = new int[4]; vett[0] = 12; vett[1] = 35; vett[2] = 44; vett[3] = 3; stampaArray(vett); // si passa il RIFERIMENTO di vett } public static void stampaArray(int[] array) { // 'array' punta allo stesso oggetto di 'vett' for (int indice = 0; indice < array.length; indice++) { System.out.println(array[indice]); } }
Variabile Tipo Contiene Punta a
vett int[] Riferimento (es. i2142) Array {12, 35, 44, 3}
array (parametro) int[] Copia del riferimento (i2142) Stesso array {12, 35, 44, 3}
6. Errore Comune: Copia di un Array
Uno degli errori più frequenti tra chi inizia a lavorare con gli array in Java riguarda la copia di un vettore. La comprensione della differenza tra copia del riferimento e copia del contenuto è fondamentale per evitare comportamenti inattesi.
Molti principianti tentano di copiare un array con una semplice assegnazione:
int vett[] = new int[4]; vett[0] = 12; vett[1] = 35; vett[2] = 44; vett[3] = 3; int vett2[] = vett; // ERRORE: non copia i dati!
ATTENZIONE: questa istruzione non crea una copia indipendente dell'array. Copia soltanto il riferimento: dopo l'assegnazione, sia vett che vett2 puntano allo stesso array in memoria. Qualsiasi modifica a vett2 si rifletterà su vett e viceversa.
Situazione vett vett2 Array in memoria Dopo int vett2[] = vett punta a i2142 punta a i2142 (stessa!) {12, 35, 44, 3} Dopo vett2[0] = 99 punta a i2142 punta a i2142 (stessa!) {99, 35, 44, 3}
Per ottenere una copia indipendente è necessario creare un nuovo array della stessa dimensione e copiare ogni elemento uno per uno con un ciclo:
int vett[] = new int[4]; vett[0] = 12; vett[1] = 35; vett[2] = 44; vett[3] = 3; // Crea un nuovo array della stessa dimensione int vettCopia[] = new int[vett.length]; // Copia elemento per elemento for (int indice = 0; indice < vett.length; indice++) { vettCopia[indice] = vett[indice]; } Dopo questa operazione, vett e vettCopia sono due array distinti in memoria. Modificare gli elementi di uno non influenza l'altro.
Java offre anche il metodo di libreria System.arraycopy() per eseguire la copia di un array in modo efficiente:
// System.arraycopy(src, srcPos, dest, destPos, length) int vettCopia[] = new int[vett.length]; System.arraycopy(vett, 0, vettCopia, 0, vett.length);
Un Array Bidimensionale è un array i cui elementi sono a loro volta array. Gli Array Bidimensionali sono comunemente chiamati MATRICI.
Si tratta di un'estensione dei vettori: mentre un vettore v è un gruppo di variabili v[0], v[1], v[2], ..., v[n] , una matrice è composta da più variabili identificate da due indici :
v[0][0], v[0][1], v[0][2], ... v[1][0], v[1][1], ... v[n][m] Nei vettori basta un indice per identificare un valore; nelle matrici un valore è identificato da due indici : l' indice di riga (i) e l' indice di colonna (j).
Una Matrice è come una tabella dove in ogni cella si può salvare un valore. Per leggere o scrivere un valore occorre indicare riga e colonna della cella — esattamente come nel gioco della battaglia navale. La cella evidenziata in giallo nell'esempio corrisponde a V[1][2] = 13 :
[0] [1] [2] [3] [4]
[0] 3 5 1 7 23
[1] 11 25 13 14 25
[2] 15 17 18 16 20
[3] 21 22 26 28 30
[4] 31 55 71 87 93
Entrambi gli indici partono sempre da 0. Per una matrice N×M: le righe vanno da 0 a N-1 e le colonne da 0 a M-1.
In Java una Matrice, come le altre tipologie di variabili, va dichiarata e inizializzata. Per definire una variabile Matrice è necessario specificare: il nome , il tipo degli elementi , il numero di righe e il numero di colonne.
La sola dichiarazione crea la variabile riferimento ma non alloca memoria per la matrice. Il riferimento punta a null :
int[][] matrix; // solo la variabile riferimento, nessuna matrice in memoria
Con l'inizializzazione si crea realmente la matrice in memoria, specificando numero di righe e colonne:
int[][] matrix = new int[2][4]; // matrice 2 righe x 4 colonne Questa istruzione crea una matrice con 2 righe (indici 0-1) e 4 colonne (indici 0-3), per un totale di 8 celle, tutte inizializzate a 0 per il tipo int.
n IMPORTANTE: La sola dichiarazione int[][] matrix non crea la matrice: la variabile contiene un riferimento non ancora puntato a nessun oggetto. Per poter utilizzare la matrice è necessario inizializzarla con new int[N][M].
3. Scrittura e Lettura di una Matrice
Per accedere ai singoli elementi di una matrice occorre specificare il nome della variabile e i due indici [i][j] che ne definiscono le coordinate. Gli indici iniziano sempre da 0.
Per leggere il valore in posizione riga 2, colonna 4 di una matrice 5×6:
Scrittura cella matrix[i][j] = valore; Scrive valore alla riga i, colonna j
Numero di righe matrix.length Restituisce il numero di righe
Numero di colonne matrix[i].length^ Restituisce il numero di colonne della riga i
4. Passaggio di Parametri con Matrice
Una Matrice, essendo un vettore che contiene altri vettori (un array a due dimensioni), ha le stesse proprietà e lo stesso comportamento degli array monodimensionali riguardo al passaggio di parametri.
Quando si passa una Matrice come parametro a un metodo, Java passa implicitamente al metodo una copia del riferimento. Questo comporta un passaggio per riferimento :
// Dichiarazione del metodo che riceve una matrice: public static void elaboraMatrice(int[][] m) { m[0][0] = 99; // modifica visibile anche fuori dal metodo! } // Nel main: int[][] matrix = new int[3][3]; elaboraMatrice(matrix); // matrix[0][0] vale ora 99
4 Comportamento analogo ai vettori: il passaggio per riferimento vale sia per gli array monodimensionali che per le matrici. Quando si copia il riferimento di un array, l'originale e la copia puntano allo stesso oggetto: le modifiche effettuate tramite uno dei due riferimenti sono immediatamente visibili tramite l'altro.
Riepilogo