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