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