Java, podobnie jak większość innych języków programowania, obsługuje zagnieżdżone pętle. Oznacza to tylko pętlę w pętli. W tym artykule dowiemy się, jak pracować z zagnieżdżonymi pętlami w Javie.
Pętle zagnieżdżone w Javie
Pętla jest nazywana zagnieżdżoną, jeśli jest umieszczona wewnątrz innej pętli. W pierwszym przebiegu pętla zewnętrzna wywołuje pętlę wewnętrzną, która przebiega do końca, po czym sterowanie jest przekazywane do ciała pętli zewnętrznej. W drugim przebiegu zewnętrzna pętla ponownie wywołuje wewnętrzną. I tak dalej, aż zewnętrzna pętla się skończy. W Javie istnieją cztery typy pętli:-
dla pętli
-
pętla while
-
wykonaj pętlę while
-
dla każdej pętli
Jak działają zagnieżdżone pętle Java
Prawdopodobnie najczęściej używaną pętlą w Javie jest pętla for , w dużej mierze dlatego, że jest dość wszechstronna, a kod z nią związany jest dość łatwy do odczytania. Oto ogólna składnia zagnieżdżonej pętli for :
// outer loop
for (initialization; condition; increment) {
//write here your code
//nested loop
for(initialization; condition; increment) {
//write here your code
}
..
}
Jak on pracuje? Rozpoczyna się zewnętrzna pętla. Następnie zagnieżdżona pętla for rozpoczyna pracę i przechodzi przez swój indeks, aż warunek zostanie spełniony, i ponownie przekazuje pracę do pętli zewnętrznej, a dzieje się tak, dopóki warunek pętli zewnętrznej nie zostanie spełniony. Brzmi trochę zawile, prawda? Cóż, o wiele łatwiej będzie to zrozumieć na konkretnym przykładzie, więc przejdźmy do tego.
Zagnieżdżony przykładowy kod pętli
Oto jeden z klasycznych przykładów. Wydrukujmy pół piramidy za pomocą dwóch pętli for . Jeden z nich jest zagnieżdżony.
public class NestedLoopsDemo1 {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j<=i; j++)
System.out.print("*");
System.out.println();
}
}
}
Dane wyjściowe to:
*
**
***
****
*****
******
*******
********
*********
**********
Przykład kodu zagnieżdżonej pętli while
public class NestedLoopsDemo2 {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
int j = 0;
while (j <= i) {
System.out.print("*");
j++;
}
System.out.println();
i++;
}
}
}
Dane wyjściowe są takie same jak w poprzednim przykładzie:
*
**
***
****
*****
******
*******
********
*********
**********
Pętla do...while jest podobna do pętli while . Główna różnica polega na tym, że ciało pętli do...while jest wykonywane raz przed sprawdzeniem wyrażenia.
Przykład kodu zagnieżdżonych pętli foreach
Pętla for-each może być zagnieżdżana jak zwykła pętla for . Oto przykład zagnieżdżonej pętli for-each , która iteruje dwuwymiarową tablicę.
public class NestedLoops2 {
public static void main(String[] args)
{
int[][] mainArray = { {5, 4, 3, 2, 1}, {7, 8, 9, 10, 11} };
for (int[] myArray : mainArray)
{
for (int i : myArray)
{
System.out.print(i+" ");
}
System.out.println("");
}
}
}
Dane wyjściowe to:
5 4 3 2 1
7 8 9 10 11
Mieszany przykład pętli for i while
Czasami możemy zagnieżdżać w sobie różne typy pętli. Na przykład for inside while lub for inside for-each . Jednak nie jest to najlepsza praktyka programistyczna. Takie konstrukcje znacznie pogarszają czytelność kodu. Dlatego profesjonalni programiści starają się nie mieszać jednego z drugim. Cóż, robią, ale tylko wtedy, gdy jest to naprawdę potrzebne. I jeszcze jedna mała zasada: jeśli wybierasz między while i for , używaj for tam, gdzie to możliwe. Niemniej jednak tutaj będziemy mieli przykład użycia pętli for wewnątrz while . Zbudujmy ponownie naszą półpiramidę.
public class NestedLoopsDemo2 {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
for (int j = 0; j <= i; j++) {
System.out.print("*");
}
System.out.println();
i++;
}
}
}
Wyjście bez niespodzianek:
*
**
***
****
*****
******
*******
********
*********
**********
GO TO FULL VERSION