capitolo 6 iterazione lucidi relativi al volume: java – guida alla programmazione james cohoon,...

Post on 03-May-2015

220 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

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

top related