İç içe döngüler, bir döngü dizisini diğerinin içinde çalıştırmaya olanak tanır. Çok boyutlu yapıları, örneğin iki boyutlu diziler veya element kombinasyonları üzerinde işlem yapmak gerektiğinde kullanılır. İlk döngü dış döngü, içindeki döngü ise iç döngü olarak adlandırılır.
İç içe yapılara, örneğin matrisler veya grafiklerle çalışmanın gerekliliği, iç içe döngülerin ortaya çıkmasına neden olmuştur. Programlama dilleri, Java da dahil olmak üzere, bu tür bir mekanizmayı, dizileri, grafikleri, ızgaraları vb. işlemek için program yazabilmek amacıyla destekler.
İç içe döngüler, yineleme sayısını dikkate almazsanız yüksek zaman karmaşıklığına neden olabilir. Kodun okunabilirliği ve indeksleme hatalarıyla sık sık sorunlar ortaya çıkar. Yanlış kullanım, aynı eylemlerin tekrar tekrar gerçekleştirilmesine yol açar.
Kod örneği:
int[][] matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { System.out.print(matrix[i][j] + " "); } System.out.println(); }
Anahtar özellikler:
İki döngüyü birden break ile hemen bitirmek mümkün mü?
Normal break komutu yalnızca iç döngüyü sonlandırır. Birden fazla döngüden çıkmak için etiketler (label) kullanılır:
outer: for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (koşul) break outer; } }
İç içe döngüler nedeniyle sonsuz döngü oluşabilir mi?
Evet, herhangi bir döngüden çıkış koşulu yanlış bir şekilde uygulanmışsa sonsuz döngü ile sonuçlanır. Bu özellikle başlatma veya sayaç artırma hataları durumunda sıkça görülür.
İç döngüden dış döngünün değişkenlerine müdahale etmek mümkün mü?
Evet, teknik olarak mümkündür, ancak bu okunabilirliği önemli ölçüde kötüleştirir ve hatalara yol açar. Bununla dikkatlice çalışmak ve her döngünün işlevini açıkça ayırmak daha iyidir.
İki boyutlu bir dizinin döngüsü oluşturuluyor, ama i ve j yerine her yerde yalnızca i kullanılıyor:
for (int i = 0; i < n; i++) { for (int i = 0; i < m; i++) {...} }
Artılar:
Eksiler:
Farklı değişken isimleri kullanılıyor:
for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) {...} }
Artılar:
Eksiler: