Giriş
İlk proqramlarımız bir-birinin ardınca yerinə yetirilən əmrlər ardıcıllığı idi. Çəngəl yoxdur. Bu, salamlama ifadəsi və arifmetik hesablamaları konsola çıxaran HelloWorld-dir. İlk proqramlardan sonra biz budaqlanmağı öyrəndik, yəni proqram şərtlərdən asılı olaraq müəyyən hərəkətləri yerinə yetirirdi. Kondisioneri isitmə və soyutma üçün yandırmaq üçün necə kodlaşdıra bilərsiniz:if (tempRoom>tempComfort)
airConditionerOn();
if (tempRoom<tempComfort
heaterOn();
Gəlin növbəti addımı ataq. Gündəlik həyatda tez-tez monoton, təkrarlanan hərəkətlər edirik, məsələn, bir pasta üçün alma qabığı. Bu maraqlı prosesi belə təsvir etmək olar:
-
Hövzədə alma varsa, 1.1-1.4 addımlarını yerinə yetirin:
- 1.1. Bir alma götürün
- 1.2. Təmizləyin və dilimlərə kəsin
- 1.3. Bir qızartma qabda pasta pastasının əsasına qoyun
- 1.4. 1-ci addıma qayıdaq.
- Gəlin özümüzü almaların sayına bağlayaq, amma onların sayı az olsa, bəzi əmrlər “faydalı” olmadan əbəs yerə yerinə yetirilərdi (və ola bilsin ki, olmayan almanın qabığını soyarkən özümüzü kəsərdik).
- Əgər bizim emal qruplarımızdan daha çox alma olsaydı, məhsulların bir hissəsi emal olunmaz.
- Belə “kod”u oxumaq çətindir, çoxlu təkrarları ehtiva edir və dəyişdirilməsi çətindir.
Döngələr bir neçə dəfə hərəkətləri yerinə yetirmək üçün operatorlardır.
Bizim vəziyyətimizdə Java while döngəsi (pis döngə) yaxşı işləyir. Bu dizayn bir çox hərəkətləri qısa və başa düşülən bir quruluşda təşkil edir. Java-da pasta üçün alma dilimləmək üçün bir müddət alqoritm belə görünə bilər:while(числоЯблокВТазике>0) {
яблоко = тазик.взятьОчередноеЯблоко();
положитьВПирог(яблоко.чистить().нарезать());
числоЯблокВТазике--;//-- this is a decrement, reduces the number of apples by one
}
System.out.println('Apples for the pie are processed.');
Komanda Sintaksisi
while ifadəsini təsvir etməyin ilk yolu aşağıdakı kimidir:while(Логическое выражение) {
// Loop body - periodically executed statement(s)
}
Bu aşağıdakı kimi edilir (addım-addım):
- Mötərizədə müddətdən sonra gələn Boolean şərtini qiymətləndiririk.
- Əgər məntiqi şərt doğrudursa, onda dövrə gövdəsindəki ifadələr yerinə yetirilir, döngənin gövdəsində sonuncu ifadəni yerinə yetirdikdən sonra 1-ci addıma keçin.
- Məntiqi şərt yalnışdırsa, while dövrəsindən kənar ilk ifadəyə keçin.
Ön şərtlə döngə
Döngənin gövdəsini yerinə yetirməzdən əvvəl biz həmişə məntiqi ifadəni (döngüyə daxil olmaq şərtini) əvvəlcədən hesabladığımız üçün bu tip while tez-tez ilkin şərti olan dövrə adlanır. Ədədin ilk on tam, müsbət dərəcələrinin cədvəlini quraq:public static void main(String[] args) {
int number = 3; // Number to be raised to a power
int result = 1; // Result of exponentiation
int power = 1; // Initial exponent
while(power <= 10) { // loop entry condition
result = result * number;
System.out.println(number + "to the extent" + power + " = " + result);
power++;
}
}
Konsol çıxışı nəticəsi:
3 в степени 1 = 3
3 в степени 2 = 9
3 в степени 3 = 27
3 в степени 4 = 81
3 в степени 5 = 243
3 в степени 6 = 729
3 в степени 7 = 2187
3 в степени 8 = 6561
3 в степени 9 = 19683
3 в степени 10 = 59049
Process finished with exit code 0
Postşart ilə döngə
İkinci növ dövr:do {
// Loop body - periodically executed statement(s)
}while (Логическое выражение);
Aşağıdakı kimi həyata keçirilir (addımlar):
- Döngənin gövdəsi icra olunur (do açar sözündən dərhal sonra).
- Mötərizədə müddətdən sonra gələn Boolean şərtini qiymətləndiririk.
- Məntiqi şərt doğrudursa, 1-ci addıma keçin
- Məntiqi şərt yalnışdırsa, while dövrəsindən kənar ilk ifadəyə keçin.
public static void main(String[] args) {
int number = 3;// Number to be raised to a power
int result = number;// Result of exponentiation
int power = 1;// Initial exponent
do {
System.out.println(number + "to the extent" + power + " = " + result);
power++;
result = result * number;
}while (result < 10000); // loop exit condition
Konsol çıxışı nəticəsi:
3 в степени 1 = 3
3 в степени 2 = 9
3 в степени 3 = 27
3 в степени 4 = 81
3 в степени 5 = 243
3 в степени 6 = 729
3 в степени 7 = 2187
3 в степени 8 = 6561
Process finished with exit code 0
Koddakı dəyişikliklərə diqqət yetirin, onu ilkin şərtlə döngənin versiyası ilə müqayisə edin.
Döngələrlə işləmək haqqında maraqlı faktlar
Döngənin gövdəsində idarəetmə əmrləri
Döngənin gedişatına təsir edən iki əmr var: xüsusiyyətlərini növbəti fəsildə göstərəcəyimiz fasilə və- davam – cari dövrənin gövdəsinin icrasını dayandırır və while operatorunun məntiqi ifadəsinə keçir. Hesablanmış ifadə doğrudursa, dövrənin icrası davam edəcək.
- fasilə – cari dövrənin icrasını dərhal dayandırır və ondan kənarda olan birinci əmrə keçir. Beləliklə, cari dövrənin icrası kəsilir. Növbəti mövzuda daha ətraflı baxacağıq.
continue
:
while(числоЯблокВТазике>0) {
яблоко = тазик.взятьОчередноеЯблоко();
числоЯблокВТазике--;//-- this is a decrement, reduces the number of apples by one
if (яблоко.плохое()) { // method will return true for rotten, etc. apples
яблоко.выкинутьВМусор();
continue; // continue the loop, go to the condition number ofApplesIn the Basin>0
}
положитьВПирог(яблоко.чистить().нарезать());
}
Konstruksiya
continue
tez-tez bir döngənin gövdəsində müəyyən bir vəziyyət yarandıqda əmrləri yerinə yetirmək lazım olduqda istifadə olunur, məsələn, avadanlıqdakı bir sensor işə salındıqda hərəkətləri yerinə yetirmək (əks halda onun göstəricilərini oxumaq dövrünə davam edin) və ya yalnız dövrün müəyyən addımlarında ifadəni hesablamaq. Sonuncu vəziyyətə misal olaraq kvadratı onların sayından kiçik olan natural ədədlərin kublarının cəminin while dövrəsində hesablanmasıdır:
public static void main(String[] args) {
int sum = 0; // total amount
int i = 0; // starting number of the row
int count = 20; // amount of numbers
while(i<=count) {
i++; // take the next number, i++ is equivalent to i=i+1
if (i*i<=count) // if the square of the number is less
continue; // number of numbers - do not count the sum
// move on to the next number in the loop
sum += i*i*i; // otherwise, we calculate the sum of cubes of numbers
} // sum += i*i*i - notation similar to sum = sum + i*i*i
System.out.println(sum);// print result
}
Sonsuz dövr
Bu idarəetmə əmrləri ən çox sonsuz döngədə istifadə olunur. Məntiqi çıxış şərti heç vaxt təmin olunmadığı üçün bu adlanır. Kodda belə görünür:while(true) {
// Loop body
}
break
Bu vəziyyətdə, ondan çıxış təşkil etmək üçün bir əmrdən istifadə etmək faydalı olacaq . Bu tip döngə, döngə gövdəsinin məntiqindən kənarda formalaşan xarici şərtləri gözləyərkən baş verir. Məsələn, qəhrəmanın ətrafındakı virtual dünyanı təqlid edən oyunlarda (döngüdən çıxmaq = oyundan çıxmaq), əməliyyat sistemləri. Və ya alqoritmlərdən istifadə edərkən, ola bilsin ki, dövrədə hər bir sonrakı zənglə nəticəni yaxşılaşdırın, lakin onları vaxt və ya xarici hadisənin baş verməsi (dama, şahmat və ya hava proqnozu) ilə məhdudlaşdırın. Yadda saxlamaq lazımdır ki, normal şəraitdə sonsuz döngələr proqramın qeyri-sabitliyi problemlərindən biridir. Nümayiş etmək üçün rəqəmlərin səlahiyyətlərinə qayıdaq:
public static void main(String[] args) {
int number = 3; // Number to be raised to a power
int result = 1; // Result of exponentiation
int power = 1; // Initial exponent
while(true) {
result = result * number;
System.out.println(number + "to the extent" + power + " = " + result);
power++;
if (power>10)
break; // exit from the loop
}
}
Konsol çıxışı nəticəsi:
3 в степени 1 = 3
3 в степени 2 = 9
3 в степени 3 = 27
3 в степени 4 = 81
3 в степени 5 = 243
3 в степени 6 = 729
3 в степени 7 = 2187
3 в степени 8 = 6561
3 в степени 9 = 19683
3 в степени 10 = 59049
Process finished with exit code 0
İç-içə döngələr
Burada dövrümüzlə bağlı son mövzuya gəlirik. Gəlin alma piroqu (inşallah hazırda ac deyilsiniz) və "döngü" haqqında düşünək:-
Hövzədə alma varsa, 1.1-1.4 addımlarını yerinə yetirin:
- 1.1. Bir alma götürün
- 1.2. Чистим и нарезаем его дольками
- 1.3. Помещаем на основание пирога из теста на сковороде
- 1.4. Возвращаемся на шаг 1.
- Число долек = 0
-
Пока число долек < 12, выполнить шаги с 2.1 по 2.3
- 2.1. Отрезать очередную дольку от яблока
- 2.2. Кол-во долек ++
- 2.3. Возвращаемся на шаг 2
-
Если в тазике есть яблоки, то выполняем шаги с 1.1 по 1.6:
- 1.1. Берем яблоко
- 1.2. Очищаем его от кожуры
- 1.3. Число долек = 0
- 1.4. Пока число долек < 12, выполнить шаги с 1.4.1 по 1.4.3
- 1.4.1. Отрезать очередную дольку от яблока
- 1.4.2. Кол-во долек ++ 1.4.3. Возвращаемся на шаг 1.4
- 1.5. Помещаем дольки на тестовое основание пирога из теста на сковороде
- 1.6. Возвращаемся на шаг 1.
public static void main(String[] args) {
// Display the values of the second multiplier in the line
System.out.println(" 2 3 4 5 6 7 8 9");
int i = 2; // first multiplier, assign starting value
while(i<10) { // First loop, execute while the first multiplier is less than 10
System.out.print(i + " | ");// Display the first multiplier at the beginning of the string
int j = 2; // second multiplier, starting value
while (j<10) { // Second loop, execute while the second multiplier is less than 10
int mul=i*j; // Calculate the product of factors
if (mul<10) // If it contains one digit, print two spaces after it
System.out.print(mul + " ");
else // otherwise output the product and after it - one space
System.out.print(mul + " ");
j++; // Increase the second multiplier by one,
} // Go to the beginning of the second loop (while (j<10 ).... )
System.out.println(); // Move to the next line of output
i++; // Increase the first multiplier by one,
} // Go to the beginning of the first loop (while ( i<10 ) ....
}
Результат вывода на консоль:
2 3 4 5 6 7 8 9
2 | 4 6 8 10 12 14 16 18
3 | 6 9 12 15 18 21 24 27
4 | 8 12 16 20 24 28 32 36
5 | 10 15 20 25 30 35 40 45
6 | 12 18 24 30 36 42 48 54
7 | 14 21 28 35 42 49 56 63
8 | 16 24 32 40 48 56 64 72
9 | 18 27 36 45 54 63 72 81
Process finished with exit code 0
Циклы (в частности, оператор while) – один из фундаментальных кирпичиков построения программ. Решая задачи на JavaRush, вы изучите все их разнообразие, разберёте тонкости функционирования и получите практические навыки их применения.
GO TO FULL VERSION