Dicono che il miglior programmatore sia un programmatore pigro. Invece di eseguire più volte lo stesso tipo di azioni, troverà un algoritmo che farà il lavoro per lui. E lo farà bene in modo che non sia necessario rifarlo. Per evitare di scrivere sempre lo stesso codice, sono stati inventati i loop. Immaginiamo di dover visualizzare sulla console i numeri da 0 a 99. Codice senza loop:
System.out.println(0);
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
// And so on
Questo codice richiederà 100 righe! Così tanti. Ed ecco come apparirebbe con un loop:
for(int i = 0; i < 100; i++) {
System.out.println(i);
}
Solo 3 righe!
Cosa sono i loop?
Un ciclo for è una struttura di controllo del codice del programma che interrompe la linearità dell'esecuzione dell'algoritmo e consente di eseguire più volte il codice specificato. Ad esempio, devi prendere 30 gocce di medicinale. L'algoritmo sarà qualcosa del genere:- Preparare un bicchiere.
- Aprire il coperchio.
- Ottieni 1 goccia.
- Prendi 2 gocce. ...
- Ottieni 30 gocce.
- Chiudi la medicina.
- Prendi la porzione ricevuta.
- Preparare un bicchiere.
- Aprire il tappo antigoccia.
- Ottieni 30 gocce.
- Chiudi la medicina.
- Prendi la porzione ricevuta.
Come funziona il ciclo for
Un ciclo for viene utilizzato in questo modo:for(<начальная точка>; <condition выхода>; <операторы счетчика>) {
// Loop body
}
Пример перебора цифр от 0 до 5 и вывод каждой в консоль:
for(int i = 0; i < 5; i++) {
System.out.println(i);
}
Conclusione:
0
1
2
3
4
Se traduciamo questa voce in linguaggio umano, otteniamo quanto segue: " Crea una variabile i con un valore iniziale di 0, fino a raggiungere 5, aggiungile 1 e ad ogni passaggio scrivi il valore di i sulla console ". Il ciclo for in Java si basa su tre fasi, che possono essere rappresentate dal seguente diagramma: La condizione per uscire dal ciclo è un'espressione booleana. Se è falso, il ciclo terminerà. Nell'esempio sopra, la variabile i
viene incrementata di 1. Se il suo valore è inferiore a 5, il ciclo continua. Ma non appena i
diventa maggiore o uguale a 5, il ciclo si fermerà. L'operatore contatore è un'espressione che esegue una conversione su una variabile contatore. Nell'esempio precedente la variabile i
è stata incrementata di 1, ovvero il ciclo verrà eseguito esattamente 5 volte. Se l'operatore contatore aggiunge 2 alla variabile i
, il risultato sarà diverso:
for(int i = 0; i < 5; i = i + 2) {
System.out.println(i);
}
Conclusione:
0
2
4
Puoi anche moltiplicare una variabile, dividere, elevare a potenza, in generale, fare quello che vuoi. La cosa principale è che la trasformazione dia come risultato un numero. Il corpo del ciclo è qualsiasi codice che può essere eseguito. Nell'esempio precedente, il corpo del ciclo trasmetteva il valore della variabile i alla console, ma i contenuti di questo corpo sono limitati dal compito e dall'immaginazione. Riassumendo l'intero schema, il principio di questo ciclo for è il seguente: il codice che si trova nel corpo del ciclo verrà eseguito tante volte quante sono le conversioni che l'operatore contatore effettuerà prima che venga raggiunta la condizione per uscire dal ciclo . Se imposti la condizione di uscita dal ciclo come true
:
for(int i = 0; true; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
Quindi il codice dopo il ciclo verrà contrassegnato con un errore unreachable statement
poiché non verrà mai eseguito. Una sfida all'ingegno: come risultato dell'esecuzione del codice seguente, " Loop ended
" verrà visualizzato sulla console o il ciclo verrà eseguito all'infinito?
for(int i = 0; i > -1; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
Risposta: ci sarà. La variabile i prima o poi raggiungerà il suo valore massimo e un ulteriore aumento la trasformerà in un valore massimo negativo, per cui la condizione di uscita sarà soddisfatta (i < = -1).
forEach ciclo
Quando si lavora con i loop, a volte è necessario eseguire iterazioni su array o raccolte. In genere è possibile scorrere un array utilizzando un ciclo for:public void printAllElements(String[] stringArray) {
for(int i = 0; i < stringArray.length; i++) {
System.out.println(stringArray[i]);
}
}
Ed è giusto. Tuttavia, per scorrere tutti gli elementi dell'array uno per uno, hanno creato la costruzione forEach. La sua firma è la seguente:
for(<Тип element> <Name переменной, куда будет записан очередной элемент> : <Название массива>) {
// Loop body
}
È possibile scorrere un array di stringhe e stamparle ciascuna sulla console nel modo seguente:
public void printAllElements(String[] stringArray) {
for(String s : stringArray) {
System.out.println(s);
}
}
Anche breve e conciso. Soprattutto, non c'è bisogno di pensare al contatore e alle condizioni di uscita, tutto è già fatto per noi.
Come vengono utilizzati i cicli for
Ora diamo un'occhiata ad alcuni esempi di utilizzo del ciclo for in Java per risolvere vari problemi.Ciclo inverso (dal più grande al più piccolo)
for(int i = 5; i > 0; i--) {
System.out.println(i);
}
Conclusione:
5
4
3
2
1
Diverse variabili e incremento del contatore nel corpo del ciclo
È possibile utilizzare più variabili in un ciclo for, ad esempio possono essere convertite in un'istruzione contatore:int a = 0;
for(int i = 5; i > 0; i--, a++) {
System.out.print("Step: " + a + " Meaning: ");
System.out.println(i);
}
Conclusione:
Шаг: 0 Значение: 5
Шаг: 1 Значение: 4
Шаг: 2 Значение: 3
Шаг: 3 Значение: 2
Шаг: 4 Значение: 1
Oppure dichiara due variabili ed esegui il loop finché non sono uguali tra loro:
for(int i = 5, j = 11; i != j; i++, j--) {
System.out.println("i: " + i + " j: " + j);
}
Conclusione:
i: 5 j: 11
i: 6 j: 10
i: 7 j: 9
È improbabile che questa azione abbia qualche valore, ma è utile conoscere questa possibilità. Puoi anche creare cicli interni all'interno di un ciclo for. In questo caso, il numero di passaggi del ciclo verrà moltiplicato:
for(int i = 0; i < 5; i++) {
System.out.print(i + " | ");
for(int j = 0; j < 5; j++) {
System.out.print(j + " ");
}
System.out.print('\n');
}
Conclusione:
0 | 0 1 2 3 4
1 | 0 1 2 3 4
2 | 0 1 2 3 4
3 | 0 1 2 3 4
4 | 0 1 2 3 4
In un ciclo con contatore j
è possibile accedere al contatore del ciclo esterno. Ciò rende i cicli nidificati un modo ideale per attraversare array bidimensionali, tridimensionali e di altro tipo:
int[][] array = { {0, 1, 2, 3, 4 },
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}};
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.print('\n');
}
Conclusione:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
Completamento anticipato del ciclo
Se è necessario interrompere un ciclo durante l'elaborazione, utilizzare l'operatorebreak
, che interrompe il corpo corrente del ciclo. Vengono saltate anche tutte le iterazioni successive:
public void getFirstPosition(String[] stringArray, String element) {
for (int i = 0; i < stringArray.length; i++) {
if(stringArray[i].equals(element)) {
System.out.println(i);
break;
}
}
}
Il metodo stamperà la posizione del primo elemento cercato nell'array:
String[] array = {"one", "two", "three", "Jeronimo"};
getFirstPosition(array, "two");
Conclusione:
1
Ciclo infinito
Un altro modo per creare un ciclo for infinito è lasciare vuoti l'area di dichiarazione del contatore, la condizione di uscita e l'istruzione del contatore:for (;;) {
}
Ma tieni presente che nella maggior parte dei casi un ciclo infinito è la prova di un errore logico. Un tale ciclo deve avere una condizione di uscita.
GO TO FULL VERSION