Məzmuna keç
Educora
Başlanğıc18 dəq5 / 18

Dövrlər və massivlər

for, while və do-while dövrləri ilə işi təkrarla, massivlərdə çoxlu qiymət saxla və onları emal et.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • for, while və do-while dövrlərini yazmaq və aralarında seçim etmək
  • break və continue ilə dövrü idarə etmək
  • Massiv yaratmaq, onun elementlərini oxumaq, dəyişmək və cəmini, ən böyüyünü tapmaq

Təsəvvür et ki, sinifdəki 30 şagirdin hər birinə təbrik mesajı çap etməlisən. 30 dəfə println yazmaq olar, amma 3000 şagird olsa necə? Kompüterlər eyni işi yorulmadan təkrarlamaqda əladır — bunun üçün dövrlər var. Çoxlu qiyməti bir yerdə saxlamaq üçün isə massivlərdən istifadə olunur.

for və while dövrləri

for dövrü addımların sayı əvvəlcədən məlum olanda rahatdır. Onun başlığında üç hissə var: başlanğıc (int i = 1), şərt (i <= 5) və addım (i++). while dövrü isə şərt doğru olduğu müddətcə təkrarlanır — nə qədər təkrar olacağını bilmədiyimiz hallar üçün uyğundur.

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);
    }
}
Gözlənilən nəticə
1 2 3 4 5 
Sum of even numbers: 30
8 years, balance 212

Son hissədə Elvin banka 100 manat qoyur və hər il məbləğə 10% əlavə olunur. Neçə il gözləməli olduğunu bilmirik, ona görə while dövründən istifadə edirik: dövr balans 200-ə çatana qədər davam edir. balance / 10 tam bölmədir, ona görə hər il faiz tam manata qədər aşağı yuvarlaqlaşdırılır.

İnteraktiv
Simulyasiya yüklənir…
Eyni hesablamanın dəqiq variantı: kəsrlər atılmasa, 8 ildən sonra 214 manatdan bir az çox alınır. Proqramdakı int tipi isə hər il qəpikləri atır.

do-while, break və continue

do-while dövrü şərti sonda yoxlayır, ona görə onun gövdəsi şərt yalan olsa belə ən azı bir dəfə icra olunur. break dövrü dərhal bitirir, continue isə cari addımın qalan hissəsini atlayıb növbəti addıma keçir.

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();
    }
}
Gözlənilən nəticə
Attempt 1
1 2 4 5 7 

tries < 0 şərti əvvəldən yalandır, amma «Attempt 1» yenə də çap olundu. İkinci dövrdə 3 və 6 continue ilə atlandı, 8-ə çatanda isə break dövrü tamamilə dayandırdı, ona görə 9 və 10 çap olunmadı.

Massivlər

Tərif
Massiv

Eyni tipli sabit sayda qiyməti ardıcıl saxlayan obyekt. Elementlərə 0-dan başlayan indekslə müraciət olunur, massivin uzunluğu isə yaradılandan sonra dəyişmir.

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]);
    }
}
Gözlənilən nəticə
First: 85
Count: 5
Average: 84.8
Max: 99
null
0.0
  • int[] scores = {85, 92, ...}; massivi hazır qiymətlərlə yaradır; new String[3] isə 3 boş yeri olan massiv yaradır.
  • scores.length elementlərin sayıdır (sonunda mötərizə yoxdur — bu, metod deyil, sahədir).
  • for (int s : scores) — for-each dövrü: massivin hər elementini növbə ilə s dəyişəninə verir.
  • Yeni massivin elementləri avtomatik doldurulur: ədədlər 0 və ya 0.0, boolean — false, obyektlər (məsələn, String) isə null olur.

Arrays sinfi və iki ölçülü massivlər

java.util.Arrays sinfində massivlər üçün hazır alətlər var: Arrays.toString() massivi oxunaqlı mətnə çevirir, Arrays.sort() isə elementləri artan sıra ilə düzür. Massivin elementləri də massiv ola bilər — belə iki ölçülü massiv cədvəl kimidir: birinci indeks sətri, ikincisi isə sütunu göstərir.

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]);
    }
}
Gözlənilən nəticə
[42, 7, 19, 3, 25]
[3, 7, 19, 25, 42]
[1, 2, 3, 4]
[2, 4, 6, 8]
[3, 6, 9, 12]
12

Əsas fikirlər

  • for (başlanğıc; şərt; addım) addımların sayı məlum olanda, while isə şərt dəyişənə qədər təkrar üçün istifadə olunur.
  • do-while şərti sonda yoxlayır və gövdəni ən azı bir dəfə icra edir.
  • break dövrü bitirir, continue isə növbəti addıma keçir.
  • Massivin uzunluğu sabitdir, indekslər 0-dan length - 1-ə qədərdir.
  • Arrays.toString() massivi çap etməyə, Arrays.sort() isə sıralamağa kömək edir.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
for (int i = 0; i < 4; i++) dövrü neçə dəfə təkrarlanır?