Capitolo 6
Iterazione
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
Cicli Java
 Opzioni
 while
 do-while
 for
 Consentono ai programmi di controllare quante volte viene
eseguito un elenco di istruzioni
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Media
 Problema
 Estrarre un elenco di numeri positivi da inserimenti
standard e calcolarne la media
 I numeri sono uno per riga
 Un numero negativo funge da indicatore del fatto che
non vi sono altri numeri da elaborare
 Osservazioni
 Non è possibile fornire codice sufficiente utilizzando solo
assegnazioni e costrutti condizionali per risolvere il
problema
 Non si conosce la grandezza dell'elenco da elaborare
 È necessaria la capacità di ripetere il codice come
necessario
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Media
 Problema
 Estrarre un elenco di numeri positivi da inserimenti
standard e calcolarne la media
 I numeri sono uno per riga
 Un numero negativo funge da indicatore del fatto che
non vi sono altri numeri da elaborare
 Algoritmo
 Preparazione all'elaborazione
 Ottenere l'input
 Mentre esiste un input da elaborare{
 Elaborare l'input corrente
 Ottenere l'input successivo
 }
 Eseguire l'elaborazione finale
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Media
 Problema
 Estrarre un elenco di numeri positivi da inserimenti
standard e calcolarne la media
 I numeri sono uno per riga
 Un numero negativo funge da indicatore del fatto che
non vi sono altri numeri da elaborare
 Esempio di esecuzione
Enter positive numbers one per line.
Indicate end of list with a negative number.
4.5
0.5
1.3
-1
Average 2.1
public class NumberAverage {
// main(): punto di ingresso per l'applicazione
public static void main(String[] args)
throws IOException {
// imposta l'elaborazione dell'elenco
// richiede i valori all'utente
// ottiene il primo valore
// elabora i valori uno ad uno
while (value >= 0) {
// aggiunge il valore al totale
// elaborato un altro valore
// prepara l'iterazione successiva - ottiene il
valore successivo
}
// visualizza il risultato
if (valuesProcessed > 0)
// calcola e visualizza la media
else
// indica che non esistono medie da visualizzare
}
}
System.out.println("Enter positive numbers 1 per line.\n"
+ "Indicate end of the list with a negative number.");
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
int valuesProcessed = 0;
double valueSum = 0;
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Sintassi e semantica di while
while ( Expression ) Action
Logical expression
Espressione
logicat hat
che
determina
se l'Azione
va
det
ermines whet
her Act ion
eseguita.
l'espressione
is t o beSe
execut
ed — if
dà
come risultato
true,
Expression
evaluat es
to
viene
eseguita
t rue,
t hen Actl'azione;
ion is
diversamente,
il ciclo
execut
ed; ot herwise,
t he
termina.
loop is
t erminat ed
L'azione può essere un'unica
Act ion is eit her a single
istruzione o un elenco di
stistruzioni
at ement or
a st at ement
racchiuse tra
list wit hin braces.
act ionsi
parentesi
graffe. The
L'azione
ischiama
also known
as tcorpo
he body
anche
delof
t he loop.
Aftl'esecuzione
er t he body is
ciclo.
Dopo
del
corpo,
ricalcolata
execut
ed, tviene
he t est
expression
isl'espressione.
reevaluat ed. If Se
t he
l'espressione
dà
come
expression evaluat es t o t rue,
risultato true, viene
t he body is execut ed again.
eseguito di nuovo il corpo
Thedel
process
s unt ilsit he
ciclo. repeat
Il processo
t ripete
est expression
evaluat es t o
finché l'espressione
false
dà come risultato
false.
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Semantica di while per il problema della
media
Copyright © 2004 - The McGraw-Hill Companies srl
L'espressione
calcolata
Test
expressionviene
is evaluat
ed at t he
di ogni
iterazione
stall'inizio
art of each
it erat
ion of t hedel
loop.
Il indicat
valore es
dell'espressione
Itciclo.
s value
whet her t here is a
indica se esiste un numero da
number
t o process
// process values one-by-one
elaborare
while (value >= 0) {
// add value to running total
valueSum += value;
// processed another value
++valuesProcessed;
// prepare to iterate -- get the next input
value = Double.parseDouble(stdin.readLine());
}
Se l'espressione dà come risultato true,
If tvengono
est expression
is t rue,
t hese
st at ement s
eseguite
queste
istruzioni.
are execut ed.
Aft erward, t he
t estricalcolata
expression
Dopodiché,
l'espressione
viene
is reevaluat
ed and t hesiprocess
e il processo
ripete repeat s
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Semantica di while
Expression is
L'espressione
evaluat
ed at t he
viene calcolata
st art of di
each
all'inizio
ogni
ititerazione
erat ion of tdel
he
ciclo
loop
Se
If l'epressione
Expression is
dàAct
come
t rue,
ion is
risultato
true,
execut ed
viene
eseguita
l'azione
Ex pr es s i on
true
Ac t i on
false
Se l'espressione
If Expression is
dà come
false,
program
risultato
false,
execut ion del
l'esecuzione
cont
inues wit h
programma
next
st at ement
continua
con
l'istruzione
successiva
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia dell'esecuzione
int valuesProcessed = 0;
double valueSum = 0;
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia dell'esecuzione
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
0
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia dell'esecuzione
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
0
0
double value = Double.parseDouble(stdin.readLine());
valueSum
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
0
valueSum
0
value
4.5
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
0
valueSum
0
value
4.5
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
0
valueSum
4.5
0
value
4.5
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
0
1
valueSum
4.5
value
4.5
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
1
valueSum
4.5
value
0.5
4.5
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
1
valueSum
4.5
value
0.5
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
1
valueSum
5.0
4.5
value
0.5
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
1
2
valueSum
5.0
value
0.5
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
2
valueSum
5.0
value
1.3
0.5
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
2
valueSum
5.0
value
1.3
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
2
valueSum
5.0
6.3
value
1.3
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
2
3
valueSum
6.3
value
1.3
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
3
valueSum
6.3
value
1.3
-1
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
3
valueSum
6.3
value
-1
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
3
valueSum
6.3
value
-1
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
3
valueSum
6.3
value
-1
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
average
2.1
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Si supponga che l'input contenga: 4.5
Copyright © 2004 - The McGraw-Hill Companies srl
0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Traccia
int valuesProcessed = 0;
double valueSum = 0;
valuesProcessed
3
valueSum
6.3
value
-1
double value = Double.parseDouble(stdin.readLine());
while (value >= 0) {
average
2.1
valueSum += value;
++valuesProcessed;
value = Double.parseDouble(stdin.readLine());
}
if (valuesProcessed > 0){
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else{
System.out.println("No list to average");
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Conversione del testo in minuscole
public static void main(String[] args) throws
IOException {
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Enter input to be converted:");
String converted = "";
String currentLine = stdin.readLine();
while (currentLine != null) {
String currentConversion =
currentLine.toLowerCase();
converted += (currentConversion + "\n");
currentLine = stdin.readLine();
}
System.out.println("\nConversion is:\n" + converted);
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Esempio di esecuzione
Si è premuto CTRL+Z,
la sequenza di escape
di Windows per
indicare la fine del file
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia del programma
public static void main(String[] args) throws
IOException {
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Enter input to be converted:");
String converted = "";
String currentLine = stdin.readLine();
while (currentLine != null) {
String currentConversion =
currentLine.toLowerCase();
converted += (currentConversion + "\n");
currentLine = stdin.readLine();
}
System.out.println("\nConversion is:\n" + converted);
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia del programma
public static void main(String[] args) throws
IOException {
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Enter input to be converted:");
String converted = "";
String currentLine = stdin.readLine();
while (currentLine != null) {
String currentConversion =
currentLine.toLowerCase();
converted += (currentConversion + "\n");
currentLine = stdin.readLine();
}
System.out.println("\nConversion is:\n" + converted);
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia del programma
public static void main(String[] args) throws
IOException {
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Enter input to be converted:");
String converted = "";
String currentLine = stdin.readLine();
while (currentLine != null) {
String currentConversion =
currentLine.toLowerCase();
converted += (currentConversion + "\n");
currentLine = stdin.readLine();
}
System.out.println("\nConversion is:\n" + converted);
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia del programma
public static void main(String[] args) throws
IOException {
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Enter input to be converted:");
String converted = "";
String currentLine = stdin.readLine();
while (currentLine != null) {
String currentConversion =
currentLine.toLowerCase();
converted += (currentConversion + "\n");
currentLine = stdin.readLine();
}
System.out.println("\nConversion is:\n" + converted);
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia del programma
L'operatore
di concatenamento
aggiorna
The
append assignment
operat or updat
es t helarepresent at ion
rappresentazione di converted per includere la riga di
of convert ed t o include t he current input line
input corrente
converted += (currentConversion + "\n");
Represent
at ion of lower
case
Rappresentazione
della
conversion
of current
input line
conversione
in minuscole
della riga di input corrente
Newline
charact
er is needed
Il carattere
di nuova
riga è
because metperché
hod readLine()
necessario
il metodo
"st rips" t hem
from t dall'input
he input
readLine()
elimina
questo carattere
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Conversione del testo in minuscole
public static void main(String[] args) throws
IOException {
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Enter input to be converted:");
String converted = "";
String currentLine = stdin.readLine();
while (currentLine != null) {
String currentConversion =
currentLine.toLowerCase();
converted += (currentConversion + "\n");
currentLine = stdin.readLine();
}
System.out.println("\nConversion is:\n" + converted);
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Progettazione di cicli
 Domande da porsi nella progettazione e nell'analisi dei cicli
 Quale inizializzazione è necessaria per l'espressione di test
del ciclo?
 Quale inizializzazione è necessaria per l'elaborazione del
ciclo?
 Che cosa provoca la fine del ciclo?
 Quali azioni dovrebbe eseguire il ciclo?
 Quali azioni sono necessarie per prepararsi alla successiva
iterazione del ciclo?
 Quali condizioni sono true e quali false quando il ciclo
viene terminato?
 Quando termina il ciclo quali azioni sono necessarie per
preparare la successiva elaborazione del programma?
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
L'istruzione for
int currentTerm = 1;
for (int i = 0; i < 5; ++i) {
System.out.println(currentTerm);
currentTerm *= 2;
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
L'istruzione for
Init ializat ion st ep
L'inizializzazione
viene
effettuata
is performed
only
int currentTerm = 1;
solo una
volta,
once
-- just
prior
appena prima
t o t he first
del primo calcolo
evaluat ion of t he for (int i = 0; i < 5; ++i) {
dell'espressione
t estdi expression
System.out.println(currentTerm);
prova
currentTerm *= 2;
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
L'istruzione for
The
body del
of t ciclo
he loop
it erat es
Il corpo
itera
while
t he
t est expression
finché
l'espressione
di is
tprova
rue è true
Init ializat ion st ep
L'inizializzazione
viene
effettuata
is performed
only
int currentTerm = 1;
solo una
volta,
once
-- just
prior
appena prima
t o t he first
del primo calcolo
evaluat ion of t he for (int i = 0; i < 5; ++i) {
dell'espressione
t estdi expression
System.out.println(currentTerm);
prova
currentTerm *= 2;
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
L'istruzione for
The
body del
of t ciclo
he loop
it erat es
Il corpo
itera
while
t he
t est expression
finché
l'espressione
di is
tprova
rue è true
Init ializat ion st ep
L'inizializzazione
viene
effettuata
is performed
only
int currentTerm = 1;
solo una
volta,
once
-- just
prior
appena prima
t o t he first
del primo calcolo
evaluat ion of t he for (int i = 0; i < 5; ++i) {
dell'espressione
t estdi expression
System.out.println(currentTerm);
prova
currentTerm *= 2;
}
The Ilbody
of tdel
he loop
t heil
corpo
ciclodisplays
visualizza
current
t erm
in t he number
series.
termine
corrente
nella serie
di
determina
è
Itnumeri,
t hen deteermines
whatquindi
is t oqual
be t he
il numero
new current
numbercorrente
in t he series
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
L'istruzione for
The
body del
of t ciclo
he loop
it erat es
Il corpo
itera
while
t he
t est expression
finché
l'espressione
di is
tprova
rue è true
Init ializat ion st ep
L'inizializzazione
viene
effettuata
is performed
only
int currentTerm = 1;
AftDopo
er each
it erat
ion of t del
he
solo una
volta,
ogni
iterazione
once
-- just
prior
bodycorpo
of t hedel
loop,
t heviene
updat e
appena prima
ciclo,
t o t he first
del primo calcolo
ricalcolata
l'espressione
expression
is reevaluat
ed
evaluat
ion
of
t
he
for
(int
i
=
0;
i
<
5;
++i)
{
dell'espressione
aggiornata
t estdi expression
System.out.println(currentTerm);
prova
currentTerm *= 2;
}
The Ilbody
of tdel
he loop
t heil
corpo
ciclodisplays
visualizza
current
t erm
in t he number
series.
termine
corrente
nella serie
di
determina
è
Itnumeri,
t hen deteermines
whatquindi
is t oqual
be t he
il numero
new current
numbercorrente
in t he series
Evaluat ed una
once
Calcolato
at t he
beginning
volta
all’inizio
of t he for
dell’esecuzione
st at ement s's
dell’istruzione
execut ion
for
Se ForExpr
è vera,
If ForExpr is t rue,
viene
Act ion is
eseguita
execut ed
l’azione
Aft Dopo
er t he Act
ion
che
has complet ed,
l’azione è
t he
completata,
Post Expression
viene
is evaluat ed
For I ni t
For Ex pr
true
Ac t i on
calcolata
PostExpr
Pos t Ex pr
Aft er evaluat
ing t he
Dopo il calcolo
di PostExpr,
Post Expression,
t he next
inizia l’iterazione
successiva
it erat
of t he loop st art s
delion
ciclo
L’espressione
The
ForExpr is
evaluat
ed at viene
t he
ForExpr
st art
of each
calcolata
it erat ion ofdi
t heogni
all’inizio
loop
iterazione
false
If ForExpr
is
Se
ForExpr
false,
program
è falsa,
execut ion
l’esecuzione
cont inues
del wit h
next
st at ement
programma
continua
con
l’istruzione
seguente
Sintassi dell'istruzione for
Espressione
logica
chedet
determina
se her
sono
state
eseguite
l'azione
Logical
t est expression
t hat
ermines whet
t he
act ion
and updat
e st epeare
l'aggiornamento
execut ed
Init ializat
ion st ep prepares
for tilhe
L'inizializzazione
prepara
L'aggiornamento viene svolto
first
evaluat
ion
of
t
he
t
est
Updat
st ep is performed
aft er
programma per il primo calcolo
dopo el'esecuzione
del corpo
expression di prova
dell'espressione
t he execut del
ion of
t he loop body
ciclo
for ( ForInit ; ForExpression ; ForUpdate ) Action
Il body
corpo
volta
The
of del
t heciclo
loop itera
it eratogni
es whenever
provaesdàt ocome
tche
he tl'espressione
est expressiondievaluat
t rue
risultato true
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println("i is " + i);
}
System.out.println("all done");
i
0
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println("i is " + i);
}
System.out.println("all done");
i
0
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println("i is " + i);
}
System.out.println("all done");
i is 0
i
0
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println(“i is " + i);
}
System.out.println(“all done");
i is 0
i
0
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println("i is " + i);
}
System.out.println("all done");
i is 0
i
1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println("i is " + i);
}
System.out.println("all done");
i is 0
i
1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println("i is " + i);
}
System.out.println("all done");
i is 0
i is 1
i
1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println("i is " + i);
}
System.out.println("all done");
i is 0
i is 1
i
1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println("i is " + i);
}
System.out.println("all done");
i is 0
i is 1
i
2
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println("i is " + i);
}
System.out.println("all done");
i is 0
i is 1
i
2
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println("i is " + i);
}
System.out.println("all done");
i is 0
i is 1
i is 2
i
2
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println("i is " + i);
}
System.out.println("all done");
i is 0
i is 1
i is 2
i
2
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println("i is " + i);
}
System.out.println("all done");
i is 0
i is 1
i is 2
i
3
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println("i is " + i);
}
System.out.println("all done");
i is 0
i is 1
i is 2
i
3
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzione
for (int i = 0; i < 3; ++i) {
System.out.println("i is " + i);
}
3
System.out.println("all done");
i is 0
i is 1
i is 2
all done
La variabile i è uscita dal suo ambito
è locale al ciclo
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Cicli nidificati
int m = 2;
int n = 3;
for (int i = 0; i < n; ++i) {
System.out.println("i is " + i);
for (int j = 0; j < m; ++j) {
System.out.println("
j is " + j);
}
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Cicli nidificati
int m = 2;
int n = 3;
for (int i = 0; i < n; ++i) {
System.out.println("i is " + i);
for (int j = 0; j < m; ++j) {
System.out.println("
j is " + j);
}
i is 0
}
j is 0
j
i is
j
j
i is
j
j
is
1
is
is
2
is
is
1
0
1
0
1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un file
 Nozioni di base
BufferedReader
un input
flusso
input
BufferedReader isè an
stdi
ream
che, per ragioni di efficienza,
t hat uses a buffer t o st ore charact er
utilizza un buffer per memorizzare
input sl'input
for efficiency
purposes
di caratteri
System.in
è una
variabile
Syst em.in
is an Input
St ream
variable.
InputStream.
Input
St ream is tInputStream
he superclassèofla
superclasse
dei
flussi
di input di Java
Java's
input
st reams
BufferedReader stdin
= new BufferedReader(new InputStreamReader(System.in));
Input St reamReaderoffre
provides
InputStreamReader
una a
vista
charact erdei
view
of t che
he byt
es t hat
in caratteri
byte
compongono
makeil up
an input
st ream
flusso
di input
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un file
 Classe FileReader
 Sottoclasse di InputStreamReader che fornisce una vista
di input di un file
 Costruttore FileReader(String s)
 Apre il file con nome s in modo che i valori possano essere
estratti
 Il nome può essere un nome di percorso assoluto o
relativo alla cartella di lavoro corrente
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un file
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Filename: ");
String filename = stdin.readLine();
BufferedReader fileIn = new BufferedReader(
new FileReader( filename ) );
String currentLine = fileIn.readLine();
while (currentLine != null) {
System.out.println(currentLine);
currentLine = fileIn.readLine();
}
fileIn.close();
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un file
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Filename: ");
String filename = stdin.readLine();
BufferedReader fileIn = new BufferedReader(
new FileReader( filename ) );
String currentLine = fileIn.readLine();
while (currentLine != null) {
System.out.println(currentLine);
currentLine = fileIn.readLine();
}
fileIn.close();
Impostazione del flusso
di input standard
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un file
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Filename: ");
String filename = stdin.readLine();
BufferedReader fileIn = new BufferedReader(
new FileReader( filename ) );
String currentLine = fileIn.readLine();
while (currentLine != null) {
System.out.println(currentLine);
currentLine = fileIn.readLine();
}
fileIn.close();
Determinazione del nome file
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un file
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Filename: ");
String filename = stdin.readLine();
BufferedReader fileIn = new BufferedReader(
new FileReader( filename ) );
String currentLine = fileIn.readLine();
while (currentLine != null) {
System.out.println(currentLine);
currentLine = fileIn.readLine();
}
fileIn.close();
Impostazione del flusso del file
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un file
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Filename: ");
String filename = stdin.readLine();
BufferedReader fileIn = new BufferedReader(
new FileReader( filename ) );
String currentLine = fileIn.readLine();
while (currentLine != null) {
System.out.println(currentLine);
currentLine = fileIn.readLine();
}
fileIn.close();
Elabora le righe una ad una
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un file
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Filename: ");
String filename = stdin.readLine();
BufferedReader fileIn = new BufferedReader(
new FileReader( filename ) );
String currentLine = fileIn.readLine();
while (currentLine != null) {
System.out.println(currentLine);
currentLine = fileIn.readLine();
}
fileIn.close();
Ottiene la prima riga
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un file
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Filename: ");
String filename = stdin.readLine();
BufferedReader fileIn = new BufferedReader(
new FileReader( filename ) );
String currentLine = fileIn.readLine();
while (currentLine != null) {
System.out.println(currentLine);
currentLine = fileIn.readLine();
}
fileIn.close();
Assicura la presenza
di una riga da elaborare
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un file
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Filename: ");
String filename = stdin.readLine();
BufferedReader fileIn = new BufferedReader(
new FileReader( filename ) );
String currentLine = fileIn.readLine();
while (currentLine != null) {
System.out.println(currentLine);
currentLine = fileIn.readLine();
}
fileIn.close();
Visualizza la riga corrente
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un file
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Filename: ");
String filename = stdin.readLine();
BufferedReader fileIn = new BufferedReader(
new FileReader( filename ) );
String currentLine = fileIn.readLine();
while (currentLine != null) {
System.out.println(currentLine);
currentLine = fileIn.readLine();
}
fileIn.close();
Ottiene la riga successiva
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un file
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Filename: ");
String filename = stdin.readLine();
BufferedReader fileIn = new BufferedReader(
new FileReader( filename ) );
String currentLine = fileIn.readLine();
while (currentLine != null) {
System.out.println(currentLine);
currentLine = fileIn.readLine();
}
fileIn.close();
Assicura la presenza
di una riga da elaborare
Altrimenti il ciclo è terminato
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un file
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Filename: ");
String filename = stdin.readLine();
BufferedReader fileIn = new BufferedReader(
new FileReader( filename ) );
String currentLine = fileIn.readLine();
while (currentLine != null) {
System.out.println(currentLine);
currentLine = fileIn.readLine();
}
fileIn.close();
Chiude il flusso del file
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
L'istruzione do-while
 Sintassi
do Azione
while (Espressione)
 Semantica
 Esegui Azione
 Se Espressione è true
allora esegui Azione
 Ripeti il processo fino a
quando Espressione
restituisce false
 Azione è una singola
istruzione o un gruppo di
istruzioni tra parentesi
graffe
azione
true
Espressione
false
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Estrazione delle cifre
 Considerare
System.out.print("Enter a positive number: ");
int n = Integer.parseInt(stdin.readLine());
do {
int digit = number % 10;
System.out.println(digit);
number = number / 10;
} while (number != 0);
 Comportamento di esempio
Enter a positive number: 1129
1
1
2
9
Scarica

Le iterazioni