Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Programmazioni in Java - Parte 5 - Strutture dati, Schemi e mappe concettuali di Programmazione Java

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

2025/2026

In vendita dal 17/04/2026

airruh
airruh 🇮🇹

4.7

(17)

73 documenti

1 / 34

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
I Tipi di Dati in Java
Fondamenti di Programmazione
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
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22

Anteprima parziale del testo

Scarica Programmazioni in Java - Parte 5 - Strutture dati e più Schemi e mappe concettuali in PDF di Programmazione Java solo su Docsity!

I Tipi di Dati in Java

Fondamenti di Programmazione

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.

Definizione di Tipo di Dato

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.

Proprietà fondamentali

  • Ogni linguaggio di programmazione tipizzato offre tipi di dati predefiniti di uso generale.
  • Tutti i dati presenti in un programma possiedono uno e un solo tipo.
  • È possibile convertire una variabile da un tipo a un altro tramite l'operazione di casting (conversione di tipo).

I tre tipi fondamentali in Java

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.

Caratteristiche principali

  • Nella definizione del tipo occorre specificare un insieme ordinato di valori.
  • Una variabile di tipo enum può contenere solamente uno dei valori appartenenti all'insieme dichiarato.
  • È possibile confrontare variabili enum tra loro in base all'ordine di dichiarazione.
  • L'ordine in cui i valori vengono dichiarati è molto importante.

Perché usare il tipo enumerativo?

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.

Dichiarazione di un enum in Java

In Java il tipo enumerativo si dichiara usando la parola chiave enum :

public enum Giorno { LUNEDI, MARTEDI, MERCOLEDI, GIOVEDI, VENERDI, SABATO, DOMENICA }

Utilizzo dell'enum

Per dichiarare e assegnare un valore a una variabile di tipo enum si usa la sintassi . :

Giorno giornoDellaSettimana = Giorno.LUNEDI;

Metodi disponibili sugli enum

values() – Elenco di tutti i valori

Il metodo values() restituisce un array con tutti i valori dell'enum, permettendo di iterarli:

for (Giorno g : Giorno.values()) { System.out.println(g); }

valueOf(String) – Conversione da stringa

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.

ordinal() e compareTo() – Confronto tra valori

È possibile confrontare valori enum in base alla loro posizione di dichiarazione tramite due metodi:

  • ordinal() : restituisce un intero che rappresenta l'indice del valore all'interno dell'enum (a partire da 0).
  • compareTo(altroEnum) : restituisce un intero positivo se la posizione corrente è maggiore di quella passata come parametro, negativo se è minore, zero se sono uguali. L'ordine con cui vengono dichiarati i valori all'interno di un enum è quindi molto importante, poiché determina il comportamento dei metodi di confronto.

Strutture Dati Array in Java

Array Monodimensionali (Vettori) – Guida Completa

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.

Cos'è una 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:

  1. Array Monodimensionali (Vettori) – sequenze lineari di elementi omogenei.
  2. Array Bidimensionali (Matrici) – griglie di elementi organizzati in righe e colonne.

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.

Tre informazioni necessarie per definire un Array:

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

Dichiarazione

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.

Dichiarazione e Inizializzazione

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.

Inizializzazione con valori diretti

È 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).

Regola fondamentale sugli indici

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.

Lettura di un elemento

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];

Scrittura di un elemento

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

Scorrere l'intero array con un ciclo

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.

Ciclo FOR – lettura di tutti i valori:

for (int indice = 0; indice < vett.length; indice++) { System.out.println(vett[indice]); }

Ciclo WHILE – lettura di tutti i valori:

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.

Il caso speciale degli Array

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.

Esempio pratico

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]); } }

Cosa accade in memoria:

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.

Il codice ERRATO

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.

Perché accade?

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}

Il codice CORRETTO

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.

Alternativa: System.arraycopy()

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);

Array Bidimensionali o Matrici

Dichiarazione, accesso, lettura/scrittura e passaggio di parametri in Java

Argomenti trattati

  • Array Bidimensionali o Matrici – concetto e struttura
  • Come creare una Matrice in Java
  • Scrittura e lettura di una Matrice
  • Passaggio di Parametri con Matrice

1. Array Bidimensionali o Matrici

Che cos'è un Array Bidimensionale?

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).

Visualizzazione di una Matrice

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

Gli indici i e j

  • Il primo indice i è detto indice di riga (scorre verticalmente)
  • Il secondo indice j è detto indice di colonna (scorre orizzontalmente)

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.

Esempi di accesso a celle in una Matrice 5×

  • m[3][5] → riga 3, colonna 5 (ultima colonna della quarta riga)
  • m[0][2] → riga 0, colonna 2 (terza cella della prima riga)
  • m[2][0] → riga 2, colonna 0 (prima cella della terza riga) 2. Come creare una Matrice in Java

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.

Dichiarazione

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

Dichiarazione e Inizializzazione

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.

Lettura di un elemento

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.

Passaggio per riferimento

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 :

  • Sia la variabile originale che il parametro del metodo puntano allo stesso oggetto in memoria
  • Qualsiasi modifica apportata agli elementi della matrice all'interno del metodo sarà visibile anche all'esterno
  • Non viene creata una copia separata dei dati: entrambe le variabili leggono e scrivono le stesse celle

// 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

  • Un Array Bidimensionale (Matrice) è un insieme di valori disposti su righe e colonne, tutti dello stesso tipo, identificati da un nome unico e da due indici [i][j].
  • Il primo indice i (riga) e il secondo j (colonna) partono sempre da 0. Per una matrice N×M: righe da 0 a N-1, colonne da 0 a M-1.
  • La dichiarazione ( int[][] m ) crea solo il riferimento; l' inizializzazione ( new int[N][M] ) alloca realmente la memoria.
  • L'accesso a un elemento avviene con matrix[i][j] sia in lettura che in scrittura.
  • Per scorrere tutti gli elementi si usano due cicli for annidati : il ciclo esterno per le righe ( matrix.length ), quello interno per le colonne ( matrix[i].length ).
  • Il passaggio di una Matrice come parametro avviene per riferimento : il metodo riceve una copia del riferimento e le modifiche agli elementi sono visibili al chiamante.