Capitolo 8
Array
Lucidi relativi al volume:
Java – Guida alla programmazione
James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Nozioni di base
 Spesso il programmatore deve poter rappresentare un gruppo
di valori come elenco
 L'elenco può essere unidimensionale o multidimensionale
 Java fornisce le classi per array e insiemi
 Vediamo prima gli array
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Terminologia di base
 L'elenco è composto di elementi
 Gli elementi in un elenco hanno un nome comune
 L'elenco è referenziato attraverso il nome comune
 Gli elementi dell'elenco sono dello stesso tipo (il tipo di base)
 Gli elementi di un elenco sono referenziati indicizzando il nome
comune
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Funzioni degli array Java
 Gli indici sono indicati come espressioni tra parentesi quadre: [ ]
 Il tipo di base può essere qualsiasi tipo
 La dimensione dell'array può essere specificata in fase di esecuzione
 Il tipo dell'indice è intero e l'intervallo deve essere 0 … n-1
 Dove n è il numero di elementi
 Controllo automatico dei confini
 Assicura che qualsiasi riferimento a un elemento dell'array sia
valido
 La lunghezza del campo dati specifica il numero di elementi
nell'elenco
 L'array è un oggetto
 Presenta funzioni comuni a tutti gli altri oggetti
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Stili di definizione delle variabili array
 Senza inizializzazione
ElementType[] id ;
s
Type
Tipo
deiof
Le Bracket
parentesi
e array
valori
quadre
values in indicat
dell'elenco
caratterizzano
variable being
list
la definizione
defined
di una
variabile array
NameNome
of
dell'elenco
list
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Stili di definizione delle variabili array
 Con inizializzazione
Espressione
intera
non negativa
chet he
Nonnegat
ive int eger
expression
specifying
specifica
il numero
di elementi
dell'array
number
of element
s in t he array
ElementType[] id = new ElementType[n];
Reference t oaaun
new
array array
of n
Riferimento
nuovo
di element
n elementi
s
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Esempio
 Definizioni
char[] c;
int[] value = new int[10];
 Provoca
 La variabile oggetto c non è inizializzata
 La variabile oggetto array v fa riferimento a un nuovo
elenco di dieci elementi interi
 Ogni intero è inizializzato per impostazione predefinita
a0
c
value
0
0.0
0
0
0
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
int[] v = new int[10];
int i = 7;
int j = 2;
int k = 4;
v[0] = 1;
v[i] = 5;
v[j] = v[i] + 3;
v[j+1] = v[i] + v[0];
v[v[j]] = 12;
System.out.println(v[2]);
v[k] = Integer.parseInt(stdin.readLine());
v
0
0
0
0
0
0
0
0
0
0
v[0]
v[1]
v[2]
v[3]
v[4]
v[5]
v[6]
v[7]
v[8]
v[9]
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
int[] v = new int[10];
int i = 7;
int j = 2;
int k = 4;
v[0] = 1;
v[i] = 5;
v[j] = v[i] + 3;
v[j+1] = v[i] + v[0];
v[v[j]] = 12;
System.out.println(v[2]);
v[k] = Integer.parseInt(stdin.readLine());
v
1
0
0
0
0
0
0
0
0
0
v[0]
v[1]
v[2]
v[3]
v[4]
v[5]
v[6]
v[7]
v[8]
v[9]
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
int[] v = new int[10];
int i = 7;
int j = 2;
int k = 4;
v[0] = 1;
v[i] = 5;
v[j] = v[i] + 3;
v[j+1] = v[i] + v[0];
v[v[j]] = 12;
System.out.println(v[2]);
v[k] = Integer.parseInt(stdin.readLine());
v
1
0
0
0
0
0
0
5
0
0
v[0]
v[1]
v[2]
v[3]
v[4]
v[5]
v[6]
v[7]
v[8]
v[9]
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
int[] v = new int[10];
int i = 7;
int j = 2;
int k = 4;
v[0] = 1;
v[i] = 5;
v[j] = v[i] + 3;
v[j+1] = v[i] + v[0];
v[v[j]] = 12;
System.out.println(v[2]);
v[k] = Integer.parseInt(stdin.readLine());
v
1
0
8
0
0
0
0
5
0
0
v[0]
v[1]
v[2]
v[3]
v[4]
v[5]
v[6]
v[7]
v[8]
v[9]
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
int[] v = new int[10];
int i = 7;
int j = 2;
int k = 4;
v[0] = 1;
v[i] = 5;
v[j] = v[i] + 3;
v[j+1] = v[i] + v[0];
v[v[j]] = 12;
System.out.println(v[2]);
v[k] = Integer.parseInt(stdin.readLine());
v
1
0
8
6
0
0
0
5
0
0
v[0]
v[1]
v[2]
v[3]
v[4]
v[5]
v[6]
v[7]
v[8]
v[9]
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
int[] v = new int[10];
int i = 7;
int j = 2;
int k = 4;
v[0] = 1;
v[i] = 5;
v[j] = v[i] + 3;
v[j+1] = v[i] + v[0];
v[v[j]] = 12;
System.out.println(v[2]);
v[k] = Integer.parseInt(stdin.readLine());
v
1
0
8
6
0
0
0
5
12
0
v[0]
v[1]
v[2]
v[3]
v[4]
v[5]
v[6]
v[7]
v[8]
v[9]
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
int[] v = new int[10];
int i = 7;
int j = 2;
int k = 4;
v[0] = 1;
v[i] = 5;
v[j] = v[i] + 3;
Viene visualizzato 8
v[j+1] = v[i] + v[0];
v[v[j]] = 12;
System.out.println(v[2]);
v[k] = Integer.parseInt(stdin.readLine());
v
1
0
8
6
0
0
0
5
12
0
v[0]
v[1]
v[2]
v[3]
v[4]
v[5]
v[6]
v[7]
v[8]
v[9]
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
int[] v = new int[10];
int i = 7;
int j = 2;
int k = 4;
v[0] = 1;
v[i] = 5;
v[j] = v[i] + 3;
Si supponga di estrarre 3
v[j+1] = v[i] + v[0];
v[v[j]] = 12;
System.out.println(v[2]);
v[k] = Integer.parseInt(stdin.readLine());
v
1
0
8
6
3
0
0
5
12
0
v[0]
v[1]
v[2]
v[3]
v[4]
v[5]
v[6]
v[7]
v[8]
v[9]
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
 Segmento
int[] b = new int[100];
b[-1] = 0;
b[100] = 0;
 Provoca
 La variabile array fa riferimento a un nuovo elenco di 100
interi
 Ogni elemento è inizializzato a 0
 Due eccezioni da lanciare
 -1 non è un indice valido (troppo piccolo)
 100 non è un indice valido (troppo grande)
 IndexOutOfBoundsException
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
Point[] p = new Point[3];
p[0] = new Point(0, 0);
p[1] = new Point(1, 1);
p[2] = new Point(2, 2);
p[0].setX(1);
p[1].setY(p[2].getY());
Point vertex = new Point(4,4);
p[1] = p[0];
p[2] = vertex;
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
Point[] p = new Point[3];
p[0] = new Point(0, 0);
p[1] = new Point(1, 1);
p[2] = new Point(2, 2);
p[0].setX(1);
p[1].setY(p[2].getY());
Point vertex = new Point(4,4);
p[1] = p[0];
p[2] = vertex;
p[0]
p[1]
p[2]
p
Point: (0, 0)
Point: (1, 1)
Point: (2, 2)
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
Point[] p = new Point[3];
p[0] = new Point(0, 0);
p[1] = new Point(1, 1);
p[2] = new Point(2, 2);
p[0].setX(1);
p[1].setY(p[2].getY());
Point vertex = new Point(4,4);
p[1] = p[0];
p[2] = vertex;
p[0]
p[1]
p[2]
p
Point: (1, 0)
Point: (1, 1)
Point: (2, 2)
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
Point[] p = new Point[3];
p[0] = new Point(0, 0);
p[1] = new Point(1, 1);
p[2] = new Point(2, 2);
p[0].setX(1);
p[1].setY(p[2].getY());
Point vertex = new Point(4,4);
p[1] = p[0];
p[2] = vertex;
p[0]
p[1]
p[2]
p
Point: (1, 0)
Point: (1, 2)
Point: (2, 2)
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
Point[] p = new Point[3];
p[0] = new Point(0, 0);
p[1] = new Point(1, 1);
p[2] = new Point(2, 2);
p[0].setX(1);
p[1].setY(p[2].getY());
Point vertex = new Point(4,4);
p[1] = p[0];
vertex
p[2] = vertex;
p[0]
p[1]
p[2]
p
Point: (4, 4)
Point: (1, 0)
Point: (1, 2)
Point: (2, 2)
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
Point[] p = new Point[3];
p[0] = new Point(0, 0);
p[1] = new Point(1, 1);
p[2] = new Point(2, 2);
p[0].setX(1);
p[1].setY(p[2].getY());
Point vertex = new Point(4,4);
p[1] = p[0];
vertex
p[2] = vertex;
p[0]
p[1]
p[2]
p
Point: (4, 4)
Point: (1, 0)
Point: (2, 2)
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Considerare
Point[] p = new Point[3];
p[0] = new Point(0, 0);
p[1] = new Point(1, 1);
p[2] = new Point(2, 2);
p[0].setX(1);
p[1].setY(p[2].getY());
Point vertex = new Point(4,4);
p[1] = p[0];
vertex
p[2] = vertex;
p[0]
p[1]
p[2]
p
Point: (4, 4)
Point: (1, 0)
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Inizializzazione esplicita
 Sintassi
ididreferences
an array
n element
s. id[0] has
fa riferimento
a un of
array
di n elementi.
id[0]
ha
valore
ha valore
e così
value
exp0exp
, id[1
has value
exp1 exp
, and
on. via
0, ]id[1]
1 so
ElementType[] id = { exp0 , exp1 , ... expn-1 };
Each exp
is an expression t hat
Ogni elemento
exp
i è un'espressione che dà un
risultato
evaluat
es di
t otipo
t ypeElementType
Element Type
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Inizializzazione esplicita
 Esempio
String[] puppy = "nilla“, “darby“, "galen",
"panther" };
int[] unit = 1 };
 Equivale a
String[] puppy = new String[4];
puppy[0] = "nilla";
puppy[1] = “darby";
puppy[2] = "galen";
puppy[4] = "panther";
int[] unit = new int[1];
unit[0] = 1;
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Membri dell'array
 Lunghezza del membro
 Dimensione dell'array
for (int i = 0; i < puppy.length; ++i) {
System.out.println(puppy[i]);
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Membri dell'array
 Membro clone()
 Produce una copia
Point[] u = new Point(0, 0), new Point(1, 1)};
Point[] v = u.clone();
v[1] = new Point(4, 30);
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Membri dell'array
 Membro clone()
 Produce una copia
Point[] u = new Point(0, 0), new Point(1, 1)};
Point[] v = u.clone();
v[1] = new Point(4, 30);
u[0]
u[1]
u
Point: (0, 0)
v
v[0]
v[1]
Point: (1, 1)
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Membri dell'array
 Membro clone()
 Produce una copia
Point[] u = new Point(0, 0), new Point(1, 1)};
Point[] v = u.clone();
v[1] = new Point(4, 30);
u[0]
u[1]
u
Point: (0, 0)
v
Point: (1, 1)
Point: (4, 30)
v[0]
v[1]
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Creazione di una copia approfondita
 Esempio
Point[] w = new Point[u.length];
for (int i = 0; i < u.length; ++i) {
w[i] = u[i].clone();
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Creazione di una copia approfondita
u[0]
u[1]
u[2]
u
Point: (0, 0)
w[0]
w[1]
Point: (2, 1)
Point: (2, 2)
Point: (2, 1)
Point: (2, 2)
w[2]
w
Point: (0, 0)
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ricerca di un valore
System.out.println("Enter search value (number): ");
int key = Integer.parseInt(stdin.readLine());
int i;
for (i = 0; i < data.length; ++i) {
if (key == data[i]) {
break;
}
}
if (i != data.length) {
System.out.println(key + " is the " + I
+ "-th element");
}
else{
System.out.println(key + " is not in the list");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ricerca di un valore
System.out.println("Enter search value (number): ");
int key = Integer.parseInt(stdin.readLine());
int i;
for (i = 0; i < data.length; ++i) {
if (key == data[i]) {
break;
}
}
0
1
2
data
4
9
5
key
5
i
if (i != data.length) {
System.out.println(key + " is the " + I
+ "-th element");
}
else{
System.out.println(key + " is not in the list");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ricerca di un valore
System.out.println("Enter search value (number): ");
int key = Integer.parseInt(stdin.readLine());
int i;
for (i = 0; i < data.length; ++i) {
if (key == data[i]) {
break;
}
}
0
1
2
data
4
9
5
key
5
i
0
if (i != data.length) {
System.out.println(key + " is the " + I
+ "-th element");
}
else{
System.out.println(key + " is not in the list");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ricerca di un valore
System.out.println("Enter search value (number): ");
int key = Integer.parseInt(stdin.readLine());
int i;
for (i = 0; i < data.length; ++i) {
if (key == data[i]) {
break;
}
}
0
1
2
data
4
9
5
key
5
i
0
if (i != data.length) {
System.out.println(key + " is the " + I
+ "-th element");
}
else{
System.out.println(key + " is not in the list");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ricerca di un valore
System.out.println("Enter search value (number): ");
int key = Integer.parseInt(stdin.readLine());
int i;
for (i = 0; i < data.length; ++i) {
if (key == data[i]) {
break;
}
}
0
1
2
data
4
9
5
key
5
i
0
if (i != data.length) {
System.out.println(key + " is the " + I
+ "-th element");
}
else{
System.out.println(key + " is not in the list");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ricerca di un valore
System.out.println("Enter search value (number): ");
int key = Integer.parseInt(stdin.readLine());
int i;
for (i = 0; i < data.length; ++i) {
if (key == data[i]) {
break;
}
}
0
1
2
data
4
9
5
key
5
i
1
if (i != data.length) {
System.out.println(key + " is the " + I
+ "-th element");
}
else{
System.out.println(key + " is not in the list");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ricerca di un valore
System.out.println("Enter search value (number): ");
int key = Integer.parseInt(stdin.readLine());
int i;
for (i = 0; i < data.length; ++i) {
if (key == data[i]) {
break;
}
}
0
1
2
data
4
9
5
key
5
i
1
if (i != data.length) {
System.out.println(key + " is the " + I
+ "-th element");
}
else{
System.out.println(key + " is not in the list");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ricerca di un valore
System.out.println("Enter search value (number): ");
int key = Integer.parseInt(stdin.readLine());
int i;
for (i = 0; i < data.length; ++i) {
if (key == data[i]) {
break;
}
}
0
1
2
data
4
9
5
key
5
i
1
if (i != data.length) {
System.out.println(key + " is the " + I
+ "-th element");
}
else{
System.out.println(key + " is not in the list");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ricerca di un valore
System.out.println("Enter search value (number): ");
int key = Integer.parseInt(stdin.readLine());
int i;
for (i = 0; i < data.length; ++i) {
if (key == data[i]) {
break;
}
}
0
1
2
data
4
9
5
key
5
i
2
if (i != data.length) {
System.out.println(key + " is the " + I
+ "-th element");
}
else{
System.out.println(key + " is not in the list");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ricerca di un valore
System.out.println("Enter search value (number): ");
int key = Integer.parseInt(stdin.readLine());
int i;
for (i = 0; i < data.length; ++i) {
if (key == data[i]) {
break;
}
}
0
1
2
data
4
9
5
key
5
i
2
if (i != data.length) {
System.out.println(key + " is the " + I
+ "-th element");
}
else{
System.out.println(key + " is not in the list");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ricerca di un valore
System.out.println("Enter search value (number): ");
int key = Integer.parseInt(stdin.readLine());
int i;
for (i = 0; i < data.length; ++i) {
if (key == data[i]) {
break;
}
}
0
1
2
data
4
9
5
key
5
i
2
if (i != data.length) {
System.out.println(key + " is the " + I
+ "-th element");
}
else{
System.out.println(key + " is not in the list");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ricerca di un valore
System.out.println("Enter search value (number): ");
int key = Integer.parseInt(stdin.readLine());
int i;
for (i = 0; i < data.length; ++i) {
if (key == data[i]) {
break;
}
}
0
1
2
data
4
9
5
key
5
i
2
if (i != data.length) {
System.out.println(key + " is the " + I
+ "-th element");
}
else{
System.out.println(key + " is not in the list");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ricerca di un valore
System.out.println("Enter search value (number): ");
int key = Integer.parseInt(stdin.readLine());
int i;
for (i = 0; i < data.length; ++i) {
if (key == data[i]) {
break;
}
}
0
1
2
data
4
9
5
key
5
i
2
if (i != data.length) {
System.out.println(key + " is the " + I
+ "-th element");
}
else{
System.out.println(key + " is not in the list");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ricerca del valore minimo
 Segmento
int minimumSoFar = sample[0];
for (int i = 1; i < sample.length; ++i) {
if (sample[i] < minimumSoFar) {
minimumSoFar = sample[i];
}
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Method sequentialSearch() di
ArrayTools.java
Copyright © 2004 - The McGraw-Hill Companies srl
public static int sequentialSearch(int[] data, int key) {
for (int i = 0; i < data.length; ++i)
if (data[i] == key)
return i;
}
}
return -1;
}
 Considerare
int[] score = 6, 9, 82, 11, 29, 85, 11, 28, 91 };
int i1 = sequentialSearch(score, 11);
int i2 = sequentialSearch(score, 30);
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Method sequentialSearch() di
ArrayTools.java
Copyright © 2004 - The McGraw-Hill Companies srl
public static int sequentialSearch(int[] data, int key) {
for (int i = 0; i < data.length; ++i)
if (data[i] == key)
return i;
}
}
key
11
return -1;
}
data
0
1
2
3
4
5
6
7
8
6
9
82
11
29
85
11
29
91
 Considerare
int[] score = 6, 9, 82, 11, 29, 85, 11, 28, 91 };
int i1 = sequentialSearch(score, 11);
int i2 = sequentialSearch(score, 30);
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Method putList() di ArrayTools.java
public static void putList(int[] data)
for (int i = 0; i < data.length; ++i)
System.out.println(data[i]);
}
}
 Considerare
int[] score = 6, 9, 82, 11, 29, 85, 11, 28, 91 };
putList(score);
public static int[] getList() throws IOException {
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
int[] buffer = new int[MAX_LIST_SIZE];
int listSize = 0;
for (int i = 0; i < MAX_LIST_SIZE; ++i) {
String v = stdin.readLine();
if (v != null) {
int number = Integer.parseInt(v);
buffer[i] = number;
++listSize;
}
else{
break;
Metodo getList() di
}
ArrayTools.java
}
int[] data = new int[listSize];
for (int i = 0; i < listSize; ++i) {
data[i] = buffer[i];
}
return data;
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
ArrayTools.java - struttura
public class ArrayTools {
// costante di classe
private static final int MAX_LIST_SIZE = 1000;
// sequentialSearch(): cerca una chiave in un elenco non
ordinato
public static int binarySearch(int[] data, int key) ...
// valueOf(): produce una rappresentazione stringa
public static void putList(int[] data) ...
// getList(): estrae e restituisce fino a MAX_LIST_SIZE
valori
public static int[] getList() throws IOException ...
// reverse(): inverte l'ordine dei valori degli elementi
public static void reverse(int[] list) ...
// binarySearch(): cerca una chiave in un elenco ordinato
public static int binarySearch(char[] data, char key) ...
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Demo.java
import java.io.*;
public class Demo {
// main(): punto di ingresso per l'applicazione
public static void main(String[] args) throws IOException {
System.out.println("");
System.out.println("Enter list of integers:");
int[] number = ArrayTools.getList();
System.out.println("");
System.out.println("Your list");
ArrayTools.putList(number);
ArrayTools.reverse(number);
System.out.println("");
System.out.println("Your list in reverse");
ArrayTools.putList(number);
System.out.println();
}
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ordinamento
 Problema
 Disporre gli elementi in modo che siano ordinati secondo
uno schema desiderato
 Lo standard è l'ordine non decrescente
 Perché non dire ordine crescente?
 Attività principali
 Confronto degli elementi
 Aggiornamento o spostamento degli elementi
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ordinamento per selezione
 Base dell'algoritmo
 All'iterazione i, un metodo di ordinamento per selezione
 Trova l'elemento contenente l'iesimo valore più piccolo
del suo elenco v e scambia quell'elemento con v[i]
 Esempio - iterazione 0
 Scambia l'elemento più piccolo con v[0]
 Provoca lo spostamento nella posizione corretta per un
risultato ordinato del più piccolo elemento
v
0
1
2
3
4
5
6
7
8
9
'E'
'W'
'Q'
'R'
'T'
'Y'
'U'
'I'
'O'
'P'
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ordinamento per selezione
 Base dell'algoritmo
 All'iterazione i, un metodo di ordinamento per selezione
 Trova l'elemento contenente l'iesimo valore più piccolo
del suo elenco v e scambia quell'elemento con v[i]
 Esempio - iterazione 0
 Scambia l'elemento più piccolo con v[0]
 Provoca lo spostamento nella posizione corretta per un
risultato ordinato del più piccolo elemento
v
0
1
2
3
4
5
6
7
8
9
'E'
'W'
'Q'
'R'
'T'
'Y'
'U'
'I'
'O'
'P'
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ordinamento per selezione
 Base dell'algoritmo
 All'iterazione i, un metodo di ordinamento per selezione
 Trova l'elemento contenente l'iesimo valore più piccolo
del suo elenco v e scambia quell'elemento con v[i]
 Esempio - iterazione 1
 Scambia il secondo elemento più piccolo con v[1]
 Provoca lo spostamento nella posizione corretta per un
risultato ordinato del secondo elemento più piccolo
v
0
1
2
3
4
5
6
7
8
9
'E'
'W'
'Q'
'R'
'T'
'Y'
'U'
'I'
'O'
'P'
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ordinamento per selezione
 Base dell'algoritmo
 All'iterazione i, un metodo di ordinamento per selezione
 Trova l'elemento contenente l'iesimo valore più piccolo
del suo elenco v e scambia quell'elemento con v[i]
 Esempio - iterazione 1
 Scambia il secondo elemento più piccolo con v[1]
 Provoca lo spostamento nella posizione corretta per un
risultato ordinato del secondo elemento più piccolo
v
0
1
2
3
4
5
6
7
8
9
'E'
'I'
'Q'
'R'
'T'
'Y'
'U'
'W'
'O'
'P'
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Ordinamento per selezione
ArrayTools.java
Copyright © 2004 - The McGraw-Hill Companies srl
public static void selectionSort(char[] v) {
for (int i = 0; i < v.length-1; ++i) {
// intuisce la posizione dell'iesimo elemento più
piccolo
int guess = i;
for (int j = i+1; j < v.length; ++j) {
if (v[j] < v[guess]) // intuizione corretta??
// aggiorna guess all'indice dell'elemento più
piccolo
guess = j;
}
}
// guess è corretto, quindi scambia gli elementi
char rmbr = v[i];
v[i] = v[guess];
v[guess] = rmbr;
}
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Iterazione i
// intuisce la posizione dell'iesimo elemento più
piccolo
int guess = i;
for (int j = i+1; j < v.length; ++j) {
if (v[j] < v[guess]) // l'intuizione è giusta?
// aggiorna guess all'indice dell'elemento più
piccolo
guess = j;
}
// ora guess è corretto, scambia gli elementi v[guess]
e v[0]
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Array multidimensionali
 Molti problemi richiedono di organizzare le informazioni come
elenco bidimensionale o multidimensionale
 Esempi
 Matrici
 Animazione grafica
 Modelli di previsione economica
 Rappresentazione di mappe
 Studi temporali sui cambiamenti della popolazione
 Progettazione di microprocessori
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Esempio
 Segmento
int[][] m = new int[3][];
m[0] = new int[4];
m[1] = new int[4];
m[2] = new int[4];
 Produce
m[0]
m[1]
m[2]
m[2][0] m[2][1] m[2][2] m[2][3]
m
0
0
0
0
m[0][0] m[0][1] m[0][2] m[0][3]
0
0
0
0
0
0
0
0
m[1][0] m[1][1] m[1][2] m[1][3]
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Esempio
 Segmento
for (int r = 0; r < m.length; ++r) {
for (int c = 0; c < m[r].length; ++c) {
System.out.print("Enter a value: ");
m[r][c] = Integer.parseInt(stdin.readLine());
}
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Esempio
 Segmento
String[][]
s[0] = new
s[1] = new
s[2] = new
s[3] = new
 Produce
s[0]
s = new String[4][];
String[2];
String[2];
String[4];
String[3];
s[1]
s[2]
s[3]
null
null null
s[3][0] s[3][1] s[3][2]
s
null
null null
null
s[2][0] s[2][1] s[2][2] s[2][3]
null null
s[0][0] s[0][1]
null
null
s[1][0] s[1][1]
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Esempio
 Segmento
int c[][] = 1, 2, 3, 4, 5, 6, 7, 8, 9}};
 Produce
c[0]
c[1]
c[2]
7
c[3]
8
9
c[3][0] c[3][1] c[3][2]
c
5
6
c[2][0] c[2][1]
1
2
c[0][0] c[0][1]
3
4
c[1][0] c[1][1]
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Matrici
 Un array bidimensionale a volte è conosciuto come matrice
perché ricorda quel concetto matematico
 Una matrice con m righe e n colonne è rappresentata
matematicamente nel modo seguente
a1  1 a 1 2  a 1 n
a2  1 a 2 2  a 2 n


am  1 a m 2  a m n
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Somma di matrici
 Definizione C = A + B
 cij = a1ib1j + ai2b2j + . . . + ainbnj
 cij è la somma di termini prodotta dalla moltiplicazione
degli elementi della riga i di a con quelli della colonna c di
b
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Somma di matrici
public static double[][] add(double[][] a, double[][]
b) {
// determina il numero di righe nella soluzione
int m = a.length;
// determina il numero di colonne nella soluzione
int n = a[0].length;
// crea l'array per contenere la somma
double[][] c = new double[m][n];
// calcola la somma della matrice riga per riga
for (int i = 0; i < m; ++i) {
// produce la riga corrente
for (int j = 0; j < n; ++j) {
c[i][j] = a[i][j] + b[i][j];
}
}
return c;
}