1. Giriş
Proqramlaşdırmada eyni hərəkətləri dəfələrlə ardıcıl yerinə yetirmək tez-tez lazım olur. Məsələn:
- Siyahının bütün elementləri üzərindən keçmək.
- İstifadəçi düzgün dəyəri daxil edənə qədər klaviaturadan dəyərləri oxumaq.
- 1-dən 100-ə qədər bütün ədədlərin cəmini hesablamaq.
- Şifrə düzgün olana qədər istifadəçidən şifrə istəmək.
Bunların hamısını döngülərsiz reallaşdırmağa çalışsanız, alınan kod uzun, darıxdırıcı və miqyaslana bilməz olacaq. Təsəvvür edin ki, siz kalkulyator proqramı yazırsınız və 1-dən 10-a qədər ədədləri əllə toplamağa qərar verirsiniz:
int sum = 0;
sum = sum + 1;
sum = sum + 2;
sum = sum + 3;
// ... belə 10 dəfə. Hə.
İşinizi bitirməzdən əvvəl bezəcəksiniz! Həll — döngülərdir. Onlar hərəkətlərin təkrarlanmasını yığcam və anlaşılan şəkildə təsvir etməyə imkan verir. Bu gün ən baza, amma çox faydalı bir döngü — while ilə tanış olacağıq.
2. while döngüsü ilə tanışlıq
Sintaksis və əsas sxem
while döngüsü proqramlaşdırma dünyasında “tutuquşu” kimidir: müəyyən şərt yerinə yetirildiyi müddətdə eyni kod fraqmentini təkrar edir. Şərt artıq doğru olmadıqda, tutuquşu susur (döngü bitir).
Sintaksis:
while (uslovie)
{
// Döngünün gövdəsi
}
Diaqram
Budur, while döngüsünün işini anlamaq üçün sadə blok-sxem:
3. Nümunələr: while döngüsü iş başında
Klassik sayğac
1-dən 5-ə qədər sayan və ədədləri çap edən sadə proqram yazaq:
int i = 1;
while (i <= 5)
{
System.out.println("Addım № " + i);
i++; // Sayğacı artırmağı unutmayın!
}
// Çıxış:
// Addım № 1
// Addım № 2
// Addım № 3
// Addım № 4
// Addım № 5
Diqqət edin: əgər dəyişən i-ni artırmağı unutsaq, döngü heç vaxt bitməyəcək (tutuquşumuz ölməz olacaq və sonsuza qədər təkrar edəcək). Bu sonsuz döngü adlanır — qorxulu bir şeydir.
Lazım olan dəyərə qədər klaviaturadan giriş
Tez-tez döngü istifadəçidən düzgün cavabı “almaq” üçün işlədilir:
String password = "";
while (!password.equals("qwerty"))
{
System.out.print("Şifrəni daxil edin: ");
password = console.nextLine();
}
System.out.println("Xoş gəlmisiniz!");
Burada proqram siz sehrli "qwerty"-ni yazana qədər parolu daxil etməyi xahiş edir. Unutmayın: əgər password = console.nextLine(); sətrini silsəniz, döngü yenə sonsuz olacaq (parolu soruşacaq, amma girişi oxumayacaq — əbədi ilişib qalacaq, sanki xarab olmuş robot kimi).
4. while döngüsünün tipləri və istifadə ssenariləri
Adi döngü while
Bu döngü, yuxarıda göstərildiyi kimi, şərtlə əvvəl ilk iterasiyadan maraqlanır. Əgər şərt dərhal yalandırsa — döngünün gövdəsi heç bir dəfə icra olunmayacaq.
Nümunə: şərt dərhal ödənilmir
int i = 10;
while (i < 5)
{
System.out.println(i); // Heç vaxt icra olunmayacaq!
}
Bu, əslində, tam məntiqlidir. Necə yazılıbsa, elə də işləyir.
İç-içə döngülər while
Bəzən döngü içində döngü qurmaq lazım olur. Məsələn, bütün sətirləri keçmək və onların hər birində bütün simvolları yoxlamaq. Bu mərhələdə bu, daha çox avantüradır, amma sadə bir nümunə budur:
int i = 1;
while (i <= 3)
{
int j = 1;
while (j <= 2)
{
System.out.println("i = " + i + ", j = " + j);
j++;
}
i++;
}
// i = 1, j = 1
// i = 1, j = 2
// i = 2, j = 1
// i = 2, j = 2
// i = 3, j = 1
// i = 3, j = 2
İç-içə döngüləri bir neçə mühazirədən sonra daha ətraflı müzakirə edəcəyik, sadəcə sizi bir az qorxutmaq istədim :)
Sonsuz döngü
Bəzən döngülər bitir, bəzən isə — əbədi yaşayır.
while (true)
{
System.out.println("Mən əbədiəm!");
}
Nadir hallarda istifadə olunur, adətən hansısa fon prosesləri üçün (məsələn, serverin işi), amma praktikada da rast gəlinir.
5. Axmaqlıqlar yazmamaq üçün: while ilə bağlı tez-tez edilən səhvlər
Proqramlaşdırmada döngü elektrik kimidir: əladır, amma təhlükəsizlik qaydalarını bilmək lazımdır.
Problem 1: diqqətsizlikdən yaranan sonsuz döngü
Çox vaxt yeni başlayanlar şərtdən asılı olan dəyişəni yeniləməyi unudurlar. Nəticədə döngü “sonsuz” işləyir və proqramı məcburi dayandırmaq lazım gəlir (məsələn, Ctrl + C düymə birləşməsi ilə).
int i = 1;
while (i <= 5)
{
System.out.println(i);
// i++; // Eyvah! i-ni artırmağı unutduq
}
Problem 2: şərtin səhv verilməsi
Bəzən tərtibatçı özünə quyu qazır: şərt, əksinə, heç vaxt doğru olmur. Nəticədə döngü ümumiyyətlə işləmir.
int i = 10;
while (i < 5)
{
System.out.println(i); // Bu kod heç vaxt işləməyəcək.
i++;
}
Problem 3: verilənlər tipləri ilə bağlı səhv
Döngünün şərtində həmişə boolean ifadə olmalıdır — yəni hesablamanın nəticəsi true və ya false olmalıdır.
int number = 5;
while (number) // Səhv! boolean gözlənilirdi, int yox.
{
number--;
}
GO TO FULL VERSION