Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni

L12 Programmazione1 Array - Parte2

Caricato da

pitprem
Copyright
© © All Rights Reserved
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni

L12 Programmazione1 Array - Parte2

Caricato da

pitprem
Copyright
© © All Rights Reserved
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 29

A.A.

2023/2024

Programmazione 1
Turno 2
Simone Bianco
A.A. 2023/2024

Utilizzare gli array nei metodi


Variabili indicizzate come argomenti di un metodo
● Una variabile indicizzata può essere usata come argomento di un metodo in tutte le situazioni in cui può
essere utilizzato il tipo base dell’array

● Ad es. se abbiamo un metodo con questa intestazione:

public static void metodo1(double p1) {


corpo_del_metodo;
}

● Se abbiamo nel chiamante:

double var=0.1;
double[] a= new double[10];
int indice=4;

● Variabili indicizzate come a[3] e a[indice] possono essere usate come argomenti di metodo1:

metodo1(a[3]);
metodo1(a[indice]);
metodo1(var);
Array come argomenti di un metodo
● Il modo con cui si specifica che l’argomento di un metodo è un array è simile al modo con cui si dichiara
un array
Array come argomenti di un metodo

● Nota – nell’intestazione del metodo si deve specificare il tipo base dell’array, ma non
la lunghezza

● Infatti può essere passato al metodo un array di qualunque lunghezza (ammesso che
il tipo base dell’array sia lo stesso).

● Quando si passa un intero array come argomento ad un metodo, non devono essere
usate le parentesi quadre

● Un metodo può modificare il valore degli elementi di un array passato come


argomento
Passaggio di parametri – tipo primitivo

…static double media (double c1,double c2) {


double m;
m=(c1+c2)/2;
return m;
}

main {…
double a = 60000;
double b = 30000;
double c; c ?
c = media (a,b); b 30000
…}
a 60000

stack heap
Passaggio di parametri – tipo primitivo

…static double media (double c1,double c2) {


double m;
m=(c1+c2)/2;
return m;
}

m 0?
main {… 30000
c2
double a = 60000;
c1 60000
double b = 30000;
double c; c ?
c = media (a,b); b 30000
…}
a 60000

stack heap
Passaggio di parametri – tipo primitivo

…static double media (double c1,double c2) {


double m;
m=(c1+c2)/2;
return m;
}

m 45000
0
main {… 30000
c2
double a = 60000;
c1 60000
double b = 30000;
double c; c ?
c = media (a,b); b 30000
…}
a 60000

stack heap
Passaggio di parametri – tipo primitivo

…static double media (double c1,double c2) {


double m;
m=(c1+c2)/2;
return m;
}

main {…
double a = 60000;
double b = 30000;
double c; c 45000?
c = media (a,b); b 30000
…}
a 60000

stack heap
Passaggio di parametri – tipo non primitivo

…static double media (int[] p1, int[] p2) {


double m;
60000 a[0]
m=(p1[0] +p2[0])/2;
p1[0] = 1000;
p2[0] = 2000;
return m;
}

main {…
int[] a; int[] b;
double c = 0; 30000
30000 b[0]
a = new int[1];
a[0]= 60000;
c 0
b = new int[1];
b[0] = 30000; b
c = media (a,b);
…} a

stack heap
Passaggio di parametri – tipo non primitivo

…static double media (int[] p1, int[] p2) {


double m;
60000 a[0]
m=(p1[0] +p2[0])/2;
p1[0] = 1000;
p2[0] = 2000;
return m;
}

m 45000?
main {…
int[] a; int[] b; p2
double c = 0; 30000
30000 b[0]
a = new int[1]; p1
a[0]= 60000;
c 0
b = new int[1];
b[0] = 30000; b
c = media (a,b);
…} a

stack heap
Passaggio di parametri – tipo non primitivo

…static double media (int[] p1, int[] p2) {


double m;
60000
1000 a[0]
m=(p1[0] +p2[0])/2;
p1[0] = 1000;
p2[0] = 2000;
return m;
}

m 45000?
main {…
int[] a; int[] b; p2
double c = 0; 30000
2000 b[0]
a = new int[1]; p1
a[0]= 60000;
c 0
b = new int[1];
b[0] = 30000; b
c = media (a,b);
…} a

stack heap
Passaggio di parametri – tipo non primitivo

…static double media (int[] p1, int[] p2) {


double m;
60000
1000 a[0]
m=(p1[0] +p2[0])/2;
p1[0] = 1000;
p2[0] = 2000;
return m;
}

main {…
int[] a; int[] b;
double c = 0; 30000
2000 b[0]
a = new int[1];
a[0]= 60000;
c 45000
0
b = new int[1];
b[0] = 30000; b
c = media (a,b);
…} a

stack heap
Argomenti del metodo main

● Ricordiamo l’intestazione del metodo main:

public static void main (String[] args)

● È un metodo void che accetta come input un array


○ Parametro formale che si chiama args

○ Il cui tipo base è String


● Pertanto è possible fornire delle stringhe come argomento del programma

○ E queste diventano automaticamente elementi dell’array args che rappresenta


l’argomento del main
Assegnamento e uguaglianza di array
● Gli array sono oggetti
○ Gli operatori di assegnamento e uguaglianza si comportano con gli array come si
comportano con ogni altro oggetto

● L’intero contenuto dell’array è memorizzato in un’unica area di memoria


● In tal modo la posizione dell’array può essere specifiata con un unico indirizzo di
memoria
● Una variabile a cui viene assegnato un oggetto contiene l’indirizzo di memoria in cui
si trova l’oggetto
● Quindi:

○ L’operatore di assegnamento = copia l’indirizzo


○ L’operatore di uguaglianza == verifica se due array sono memorizzati nella stessa area
di memoria del computer
Assegnamento e uguaglianza di array
● Una variabile di tipo array contiene solo l’indirizzo in cui l’array è immagazzinato in
memoria

● Questo indirizzo di memoria è detto riferimento (reference) all’oggetto array in


memoria

● Per questo motivo le variabili di tipo array sono dette di tipo riferimento (reference
type)

● Un tipo riferimento è qualsiasi tipo le cui variabili contengono indirizzi di memoria


anzichè i valori degli elementi che riferiscono

● Array (e classi) sono tipi riferimento

● I tipi primitivi non lo sono


Metodi che restituiscono array

● Un metodo Java può restituire un array

● Si specifica il tipo restituito dal metodo allo stesso modo con cui si specifica
un parametro di tipo array

● Per restituire l’array:

○ Si dichiara un array locale

○ E si usa il suo identificatore all’interno dell’istruzione return


Metodi che restituiscono array
A.A. 2023/2024

Array multidimensionali
Array multidimensionali
Supponiamo di voler memorizzare in qualche tipo di array la seguente tabella di valori…
Array multidimensionali
Per quanto visto finora l’unica possibilità sarebbe “srotolarla” in un array di lunghezza 60
Array multidimensionali
Per quanto visto finora l’unica possibilità sarebbe “srotolarla” in un array di lunghezza 60

t[0] t[1] t[2] t[3] t[4] t[5]

t[6] t[…]

t[59]
Array multidimensionali
Sarebbe decisamente più comodo avere a disposizione 2 indici, uno per le righe e uno per le
colonne
Array multidimensionali

● Array che hanno esattamene due indici possono essere visualizzati su un foglio come
tabelle bidimensionali e vengono chiamati array bidimensionali

● Per convenzione si attribuisce il primo indice alla numerazione delle righe e il secondo alle
colonne: nome_array[indice_riga][indice_colonna]

● Gli array con più indici vengono generalmente chiamati array multidimensionali

● Un array con n indici viene detto array n-dimensionale

● Un semplice array con un unico indice è un array monodimensionale


Array multidimensionali

● Dichiarazione e creazione di array bidimensionali:


int[][] tabella = new int[10][6];
o equivalentemente:
int[][] tabella;
tabella = new int[10][6];

● Per la creazione di array multidimensionali è sufficiente aggiungere altre coppie di []

● È possible scansionare gli elementi di un array bidimensionale con due cicli innestati:
Array multidimensionali
Array multi-d. come parametri e valori restituiti
Rappresentazione Java di array multi-d.

● Gli array multidimensionali sono rappresentati come più array monodimensionali


● Dato l’array bidimensionale
int [][] tabella = new int [10][6];
● L’array tabella in realtà è un array monodimensionale di lunghezza 10 con tipo
base int[]
○ È quindi un array di array

● Attenzione quindi alla proprietà length:


○ tabella.length restituirà quindi 10
○ Mentre per accedere al numero di colonne dobbiamo scrivere
tabella[indice_riga].length (che restituisce 6)
Array irregolari (ragged arrays)

● All’interno di un array bidimensionale non è obbligatorio che tutte le righe abbiano la


stessa lunghezza (vale anche per array n-dimensionali)

● Esempio:

Potrebbero piacerti anche