İçeriğe geç
Educora
Başlangıç18 dk5 / 18

Döngüler ve diziler

for, while ve do-while döngüleriyle işleri tekrarla; birçok değeri dizilerde sakla ve işle.

Kendini test et
Bu derste öğreneceklerin
  • for, while ve do-while döngüleri yazmak ve aralarında seçim yapmak
  • break ve continue ile döngüyü yönetmek
  • Bir dizi oluşturmak, elemanlarını okuyup değiştirmek, toplamlarını ve en büyüğünü bulmak

Bir sınıftaki 30 öğrencinin her biri için bir tebrik mesajı yazdırman gerektiğini düşün. 30 kez println yazabilirsin, peki ya 3000 öğrenci olsaydı? Bilgisayarlar aynı işi yorulmadan tekrarlamakta harikadır; bunun için döngüler vardır. Birçok değeri tek bir yerde tutmak için ise diziler kullanılır.

for ve while döngüleri

for döngüsü, adım sayısı önceden bilindiğinde kullanışlıdır. Başlığında üç kısım vardır: başlangıç (int i = 1), koşul (i <= 5) ve adım (i++). while döngüsü ise koşul doğru olduğu sürece tekrarlanır; kaç tekrar olacağını bilmediğimiz durumlar için uygundur.

Java
public class Main {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.print(i + " ");
        }
        System.out.println();
        int sum = 0;
        for (int i = 2; i <= 10; i += 2) {
            sum += i;
        }
        System.out.println("Sum of even numbers: " + sum);
        int balance = 100;
        int years = 0;
        while (balance < 200) {
            balance += balance / 10;
            years++;
        }
        System.out.println(years + " years, balance " + balance);
    }
}
Beklenen çıktı
1 2 3 4 5 
Sum of even numbers: 30
8 years, balance 212

Son kısımda Elvin bankaya 100 manat yatırır ve her yıl tutara %10 eklenir. Kaç yıl beklemesi gerektiğini bilmediğimiz için while döngüsü kullanırız: döngü, bakiye 200'e ulaşana kadar devam eder. balance / 10 tam sayı bölmesidir; bu yüzden her yılın faizi tam manata aşağı yuvarlanır.

Etkileşimli
Simülasyon yükleniyor…
Aynı hesabın kesin hâli: kesirler atılmazsa 8 yıl sonra 214 manattan biraz fazlası birikir. Programdaki int türü ise her yıl kuruşları atar.

do-while, break ve continue

do-while döngüsü koşulunu sonda kontrol eder; bu yüzden koşul yanlış olsa bile gövdesi en az bir kez çalışır. break döngüyü hemen bitirir, continue ise o anki adımın geri kalanını atlayıp bir sonraki adıma geçer.

Java
public class Main {
    public static void main(String[] args) {
        int tries = 0;
        do {
            tries++;
            System.out.println("Attempt " + tries);
        } while (tries < 0);
        for (int i = 1; i <= 10; i++) {
            if (i % 3 == 0) {
                continue;
            }
            if (i > 7) {
                break;
            }
            System.out.print(i + " ");
        }
        System.out.println();
    }
}
Beklenen çıktı
Attempt 1
1 2 4 5 7 

tries < 0 koşulu baştan yanlış olduğu hâlde “Attempt 1” yine de yazdırıldı. İkinci döngüde 3 ve 6 continue ile atlandı, 8'e gelindiğinde ise break döngüyü tamamen durdurdu; bu yüzden 9 ve 10 yazdırılmadı.

Diziler

Tanım
Dizi

Aynı türden, sabit sayıda değeri sırayla tutan bir nesne. Elemanlara 0'dan başlayan bir indeksle erişilir; dizinin uzunluğu oluşturulduktan sonra değişmez.

Java
public class Main {
    public static void main(String[] args) {
        int[] scores = {85, 92, 78, 64, 99};
        System.out.println("First: " + scores[0]);
        System.out.println("Count: " + scores.length);
        scores[3] = 70;
        int sum = 0;
        int max = scores[0];
        for (int s : scores) {
            sum += s;
            if (s > max) {
                max = s;
            }
        }
        System.out.println("Average: " + (double) sum / scores.length);
        System.out.println("Max: " + max);
        String[] days = new String[3];
        System.out.println(days[0]);
        double[] temps = new double[2];
        System.out.println(temps[1]);
    }
}
Beklenen çıktı
First: 85
Count: 5
Average: 84.8
Max: 99
null
0.0
  • int[] scores = {85, 92, ...}; hazır değerlerle bir dizi oluşturur; new String[3] ise 3 boş yeri olan bir dizi oluşturur.
  • scores.length eleman sayısıdır (parantez yoktur; bu bir metot değil, bir alandır).
  • for (int s : scores) bir for-each döngüsüdür: dizinin her elemanını sırayla s değişkenine verir.
  • Yeni bir dizinin elemanları otomatik doldurulur: sayılar 0 ya da 0.0, boolean false, nesneler (örneğin String) ise null olur.

Arrays sınıfı ve iki boyutlu diziler

java.util.Arrays sınıfında diziler için hazır araçlar vardır: Arrays.toString() diziyi okunabilir bir metne çevirir, Arrays.sort() ise elemanları artan sırayla dizer. Bir dizinin elemanları da dizi olabilir; böyle bir iki boyutlu dizi tablo gibidir: ilk indeks satırı, ikincisi sütunu gösterir.

Java
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] nums = {42, 7, 19, 3, 25};
        System.out.println(Arrays.toString(nums));
        Arrays.sort(nums);
        System.out.println(Arrays.toString(nums));
        int[][] table = new int[3][4];
        for (int r = 0; r < table.length; r++) {
            for (int c = 0; c < table[r].length; c++) {
                table[r][c] = (r + 1) * (c + 1);
            }
        }
        for (int[] row : table) {
            System.out.println(Arrays.toString(row));
        }
        System.out.println(table[2][3]);
    }
}
Beklenen çıktı
[42, 7, 19, 3, 25]
[3, 7, 19, 25, 42]
[1, 2, 3, 4]
[2, 4, 6, 8]
[3, 6, 9, 12]
12

Önemli noktalar

  • for (başlangıç; koşul; adım) adım sayısı bilindiğinde, while ise bir koşul sağlandığı sürece tekrar için kullanılır.
  • do-while koşulu sonda kontrol eder ve gövdeyi en az bir kez çalıştırır.
  • break döngüyü bitirir, continue ise bir sonraki adıma geçer.
  • Bir dizinin uzunluğu sabittir; indeksleri 0'dan length - 1'e kadardır.
  • Arrays.toString() bir diziyi yazdırmaya, Arrays.sort() ise sıralamaya yardım eder.

Kendini test et

10 soru. Her doğru cevap XP kazandırır.

1 / 10
for (int i = 0; i < 4; i++) döngüsü kaç kez tekrarlanır?