capitolo 6 iterazione lucidi relativi al volume: java – guida alla programmazione james cohoon,...
TRANSCRIPT
Capitolo 6Iterazione
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 esecuzioneEnter positive numbers one per line.Indicate end of list with a negative number.4.50.51.3-1Average 2.1
public class NumberAverage {// main(): punto di ingresso per l'applicazionepublic 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 unowhile (value >= 0) {
// aggiunge il valore al totale// elaborato un altro valore// prepara l'iterazione successiva - ottiene
il valore successivo}
// visualizza il risultatoif (valuesProcessed > 0)
// calcola e visualizza la mediaelse
// 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
Logical expression thatdetermines whether Action
is to be executed — ifExpression evaluates to
true, then Action isexecuted; otherwise, the
loop is terminated
while ( Expression ) Action
Action is either a singlestatement or a statementlist within braces. The actionis also known as the body ofthe loop. After the body is
executed, the test expressionis reevaluated. If the
expression evaluates to true,the body is executed again.
The process repeats until thetest expression evaluates to
false
L'azione può essere un'unica istruzione o un elenco di istruzioni racchiuse tra
parentesi graffe. L'azione si chiama anche corpo del
ciclo. Dopo l'esecuzione del corpo, viene ricalcolata
l'espressione. Se l'espressione dà come
risultato true, viene eseguito di nuovo il corpo del ciclo. Il
processo si ripete finché l'espressione dà come
risultato false.
Espressione logica che determina se l'Azione va
eseguita. Se l'espressione dà come risultato true, viene
eseguita l'azione; diversamente, il ciclo
termina.
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srlSemantica di while per il problema della media
// process values one-by-onewhile (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());}
Test expression is evaluated at thestart of each iteration of the loop.Its value indicates whether there is anumber to process
If test expression is true, these statementsare executed. Afterward, the test expression
is reevaluated and the process repeats
L'espressione viene calcolata all'inizio di ogni iterazione del ciclo. Il valore dell'espressione indica se esiste un numero da elaborare
Se l'espressione dà come risultato true, vengono eseguite queste istruzioni.
Dopodiché, l'espressione viene ricalcolata e il processo si ripete
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Semantica di while
Expr essi on
Act i on
true false
Expression isevaluated at the
start of eachiteration of the
loop
If Expression istrue, Action is
executed If Expression isfalse, program
executioncontinues withnext statement
L'espressione viene calcolata all'inizio di ogni iterazione del
ciclo
Se l'espressione dà come
risultato false, l'esecuzione del
programma continua con l'istruzione successiva
Se l'epressione
dà come risultato true,
viene eseguita l'azione
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzioneint 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 0.5 1.3 -1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzioneint 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 0.5 1.3 -1
0valuesProcessed
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Traccia dell'esecuzioneint 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");}
valueSum
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
0valuesProcessed
0
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
0valuesProcessed
0
4.5
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
0valuesProcessed
0
4.5
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
0valuesProcessed
0
4.5
4.5
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
0valuesProcessed
4.5
4.5
1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
1valuesProcessed
4.5
4.50.5
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
1valuesProcessed
4.5
0.5
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
1valuesProcessed
4.5
0.5
5.0
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
1valuesProcessed
5.0
0.5
2
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
2valuesProcessed
5.0
0.51.3
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
2valuesProcessed
5.0
1.3
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
2valuesProcessed
5.0
1.3
6.3
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
2valuesProcessed
6.3
1.3
3
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
3valuesProcessed
6.3
1.3-1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
3valuesProcessed
6.3
-1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
3valuesProcessed
6.3
-1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
3valuesProcessed
6.3
-1
average 2.1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Tracciaint 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");}
valueSum
value
Si supponga che l'input contenga: 4.5 0.5 1.3 -1
3valuesProcessed
6.3
-1
average 2.1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Conversione del testo in minuscolepublic 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 programmapublic 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 programmapublic 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 programmapublic 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 programmapublic 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
Representation of lower caseconversion of current input line
converted += (currentConversion + "\n");
The append assignment operator updates the representationof converted to include the current input line
Newline character is neededbecause method readLine()"strips" them from the input
L'operatore di concatenamento aggiorna la rappresentazione di converted per includere la riga di input corrente
Rappresentazione della conversione in minuscole
della riga di input corrente
Il carattere di nuova riga è necessario perché il metodo readLine() elimina dall'input
questo carattere
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Conversione del testo in minuscolepublic 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
int currentTerm = 1;
for (int i = 0; i < 5; ++i) {System.out.println(currentTerm);currentTerm *= 2;
}
Initialization stepis performed onlyonce -- just prior
to the firstevaluation of thetest expression
L'inizializzazione viene effettuata solo una volta, appena prima
del primo calcolo dell'espressione
di prova
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;
}
The body of the loop iterateswhile the test expression istrueInitialization step
is performed onlyonce -- just prior
to the firstevaluation of thetest expression
L'inizializzazione viene effettuata solo una volta, appena prima
del primo calcolo dell'espressione
di prova
Il corpo del ciclo itera finché l'espressione di prova è true
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;
}
The body of the loop iterateswhile the test expression istrueInitialization step
is performed onlyonce -- just prior
to the firstevaluation of thetest expression
The body of the loop displays thecurrent term in the number series.It then determines what is to be thenew current number in the series
L'inizializzazione viene effettuata solo una volta, appena prima
del primo calcolo dell'espressione
di prova
Il corpo del ciclo visualizza il termine corrente nella serie di
numeri, e determina quindi qual è il numero corrente
Il corpo del ciclo itera finché l'espressione di prova è true
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;
}
After each iteration of thebody of the loop, the updateexpression is reevaluated
The body of the loop iterateswhile the test expression istrueInitialization step
is performed onlyonce -- just prior
to the firstevaluation of thetest expression
The body of the loop displays thecurrent term in the number series.It then determines what is to be thenew current number in the series
L'inizializzazione viene effettuata solo una volta, appena prima
del primo calcolo dell'espressione
di prova
Il corpo del ciclo visualizza il termine corrente nella serie di
numeri, e determina quindi qual è il numero corrente
Dopo ogni iterazione del corpo del ciclo, viene
ricalcolata l'espressione aggiornata
Il corpo del ciclo itera finché l'espressione di prova è true
For Expr
Act i on
true false
For I ni t
Post Expr
Evaluated onceat the beginning
of the forstatements's
executionThe ForExpr is
evaluated at thestart of each
iteration of theloop
If ForExpr is true,Action isexecuted
After the Actionhas completed,
thePostExpression
is evaluated
If ForExpr isfalse, program
executioncontinues withnext statement
After evaluating thePostExpression, the next
iteration of the loop starts
Calcolato una volta all’inizio
dell’esecuzione dell’istruzione
forL’espressione ForExpr viene
calcolata all’inizio di ogni
iterazione
Se ForExpr è falsa,
l’esecuzione del
programma continua
con l’istruzione seguente
Se ForExpr è vera, viene
eseguita l’azione
Dopo che l’azione è
completata, viene
calcolata PostExpr
Dopo il calcolo di PostExpr, inizia l’iterazione successiva
del ciclo
Sintassi dell'istruzione for
Logical test expression that determines whether the action and update step areexecuted
for ( ForInit ; ForExpression ; ForUpdate ) Action
Update step is performed afterthe execution of the loop body
Initialization step prepares for thefirst evaluation of the test
expression
The body of the loop iterates wheneverthe test expression evaluates to true
Espressione logica che determina se sono state eseguite l'azione e l'aggiornamento
L'inizializzazione prepara il programma per il primo calcolo
dell'espressione di prova
L'aggiornamento viene svolto dopo l'esecuzione del corpo
del ciclo
Il corpo del ciclo itera ogni volta che l'espressione di prova dà come
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 0i 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 0i 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 0i 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 0i 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 0i is 1i 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 0i is 1i 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 0i is 1i 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 0i is 1i 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 0i is 1i is 2all done
3
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 is 1i is 1 j is 0 j is 1i is 2 j is 0 j is 1
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un file Nozioni di base
BufferedReader is an input streamthat uses a buffer to store character
inputs for efficiency purposes
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.in is an InputStream variable.InputStream is the superclass of
J ava's input streams
InputStreamReader provides acharacter view of the bytes that
make up an input stream
BufferedReader è un flusso di input che, per ragioni di efficienza,
utilizza un buffer per memorizzare l'input di caratteri
System.in è una variabile InputStream. InputStream è la
superclasse dei flussi di input di Java
InputStreamReader offre una vistain caratteri dei byte che compongono
il 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 fileBufferedReader 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 fileBufferedReader 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 fileBufferedReader 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 fileBufferedReader 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 fileBufferedReader 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 fileBufferedReader 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 fileBufferedReader 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 fileBufferedReader 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 fileBufferedReader 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 fileBufferedReader 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 elaborareAltrimenti il ciclo è terminato
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Lettura di un fileBufferedReader 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
false
Espressione
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 esempioEnter a positive number: 11291129