Il looping nei linguaggi di programmazione è una funzionalità che facilita l'esecuzione ripetuta di una serie di istruzioni/funzioni mentre alcune condizioni risultano vere. Java fornisce tre modi per eseguire i cicli. Sebbene tutti i modi forniscano funzionalità di base simili, differiscono nella sintassi e nel tempo di controllo delle condizioni.
Java fornisce tre tipi di istruzioni condizionali, questo secondo tipo è l'istruzione loop.
- ciclo while: Un ciclo while è un'istruzione del flusso di controllo che consente l'esecuzione ripetuta del codice in base a una determinata condizione booleana. Il ciclo while può essere pensato come un'istruzione if ripetuta.
Sintassi:
while (boolean condition) { loop statements... }>
Giava
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > int> i=> 0> ;> > while> (i<=> 10> )> > {> > System.out.println(i);> > i++;> > }> > }> }> |
>
>Produzione
0 1 2 3 4 5 6 7 8 9 10>
- Diagramma di flusso:
- Il ciclo While inizia con il controllo della condizione booleana. Se il valore è true, vengono eseguite le istruzioni del corpo del ciclo, altrimenti viene eseguita la prima istruzione successiva al ciclo. Per questo viene anche chiamato Circuito di controllo dell'ingresso
- Una volta che la condizione viene valutata come vera, vengono eseguite le istruzioni nel corpo del ciclo. Normalmente le istruzioni contengono un valore di aggiornamento per la variabile elaborata per l'iterazione successiva.
- Quando la condizione diventa falsa, il ciclo termina, segnando la fine del suo ciclo di vita.
- per ciclo: for loop fornisce un modo conciso di scrivere la struttura del ciclo. A differenza di un ciclo while, un'istruzione for consuma l'inizializzazione, la condizione e l'incremento/decremento in un'unica riga, fornendo così una struttura di loop più breve e di facile debug.
Sintassi:
for (initialization condition; testing condition;increment/decrement) { statement(s) }>
Giava
bash per il ciclo
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > for> (> int> i=> 0> ;i<=> 10> ;i++)> > {> > System.out.println(i);> > }> > }> }> |
>
>Produzione
0 1 2 3 4 5 6 7 8 9 10>
- Diagramma di flusso:
- Condizione di inizializzazione: qui inizializziamo la variabile in uso. Segna l'inizio di un ciclo for. È possibile utilizzare una variabile già dichiarata oppure dichiarare una variabile, solo locale al loop. Condizione di test: viene utilizzata per testare la condizione di uscita per un loop. Deve restituire un valore booleano. È anche un Circuito di controllo dell'ingresso poiché la condizione viene verificata prima dell'esecuzione delle istruzioni del ciclo. Esecuzione dell'istruzione: una volta che la condizione viene valutata come vera, vengono eseguite le istruzioni nel corpo del ciclo. Incremento/Decremento: viene utilizzato per aggiornare la variabile per l'iterazione successiva. Terminazione del ciclo: quando la condizione diventa falsa, il ciclo termina segnando la fine del suo ciclo di vita.
- fare durante: do while loop è simile al while loop con la sola differenza che controlla la condizione dopo aver eseguito le istruzioni, e quindi è un esempio di Uscire dal ciclo di controllo.
Sintassi:
do { statements.. } while (condition);>
Giava
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > int> i=> 0> ;> > do> > {> > System.out.println(i);> > i++;> > }> while> (i<=> 10> );> > }> }> |
>
>Produzione
0 1 2 3 4 5 6 7 8 9 10>
- Diagramma di flusso:
- do while il ciclo inizia con l'esecuzione delle istruzioni. Non viene effettuato alcun controllo di alcuna condizione per la prima volta.
- Dopo l'esecuzione delle istruzioni e l'aggiornamento del valore della variabile, la condizione viene verificata per verificare se il valore è vero o falso. Se viene valutato su true, viene avviata l'iterazione successiva del ciclo.
- Quando la condizione diventa falsa, il ciclo termina, segnando la fine del suo ciclo di vita.
- È importante notare che il ciclo do- while eseguirà le sue istruzioni almeno una volta prima che venga verificata qualsiasi condizione, e quindi è un esempio di ciclo di controllo di uscita.
Insidie dei loop
- Ciclo infinito: uno degli errori più comuni durante l'implementazione di qualsiasi tipo di ciclo è che potrebbe non terminare mai, ovvero il ciclo viene eseguito per un tempo infinito. Ciò accade quando la condizione fallisce per qualche motivo. Esempi: Ciclo for infinito:
Giava
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > for> (;;) {> > }> > }> }> |
>
>
ciclo while infinito:
Giava
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > while> (> true> )> > {> > // statement> > }> > > }> }> |
>
>
Giava
//Java program to illustrate various pitfalls.> public> class> LooppitfallsDemo> {> > public> static> void> main(String[] args)> > {> > // infinite loop because condition is not apt> > // condition should have been i>0.> > for> (> int> i => 5> ; i !=> 0> ; i -=> 2> )> > {> > System.out.println(i);> > }> > int> x => 5> ;> > // infinite loop because update statement> > // is not provided.> > while> (x ==> 5> )> > {> > System.out.println('In the loop');> > }> > }> }> |
>
>
Un'altra trappola è che potresti aggiungere qualcosa all'oggetto della raccolta tramite loop e potresti esaurire la memoria. Se provi ad eseguire il programma seguente, dopo un po' di tempo verrà lanciata un'eccezione di memoria insufficiente.
Giava
//Java program for out of memory exception.> import> java.util.ArrayList;> public> class> Integer1> {> > public> static> void> main(String[] args)> > {> > ArrayList ar => new> ArrayList();> > for> (> int> i => 0> ; i { ar.add(i); } } }> |
>
>
Produzione:
Exception in thread 'main' java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown Source) at java.util.Arrays.copyOf(Unknown Source) at java.util.ArrayList.grow(Unknown Source) at java.util.ArrayList.ensureCapacityInternal(Unknown Source) at java.util.ArrayList.add(Unknown Source) at article.Integer1.main(Integer1.java:9)>
Ciclo annidato:
Per ciclo nidificato si intende un'istruzione di ciclo all'interno di un'altra istruzione di ciclo.
Esistono diverse combinazioni di utilizzo del loop per ciclo continuo, Mentre ciclo continuo, fare durante ciclo continuo.
Ex.1 Ciclo annidato per
Giava
carattere in lattice di dimensioni
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > for> (> int> i => 0> ; i <> 3> ; i++){> > for> (> int> j => 0> ; j <> 2> ; j++){> > System.out.println(i);> > }> > System.out.println();> > }> > }> }> |
>
>Produzione
mysql elenca tutti gli utenti
0 0 1 1 2 2>
Ex.2 Ciclo while annidato
Giava
import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> i => 1> , j => 1> ;> > while> (i <=> 3> ) {> > while> (j <=> 3> ) {> > System.out.print(j);> > j++;> > }> > i++;> > System.out.println(> ''> );> > j => 1> ;> > }> > }> }> |
>
>Produzione
123 123 123>
Ex.3 Ciclo do while nidificato
Giava
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> row => 1> , column => 1> ;> > int> x;> > do> {> > x => 4> ;> > do> {> > System.out.print(> ''> );> > x--;> > }> while> (x>= riga);> > column => 1> ;> > do> {> > System.out.print(column +> ' '> );> > column++;> > }> while> (column <=> 5> );> > System.out.println(> ' '> );> > row++;> > }> while> (row <=> 5> );> > }> }> |
>
>Produzione
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5>
Ex.4 Ciclo while e for nidificati
Giava
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> weeks => 3> ;> > int> days => 7> ;> > int> i => 1> ;> > // outer loop> > while> (i <= weeks) {> > System.out.println(> 'Week: '> + i);> > // inner loop> > for> (> int> j => 1> ; j <= days; ++j) {> > System.out.println(> ' Days: '> + j);> > }> > ++i;> > }> > }> }> |
>
>Produzione
Week: 1 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7 Week: 2 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7 Week: 3 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7>