Deyirlər ki, ən yaxşı proqramçı tənbəl proqramçıdır. Eyni tipli hərəkətləri bir neçə dəfə yerinə yetirmək əvəzinə, işini onun yerinə yetirəcək bir alqoritm hazırlayacaq. Və o, bunu yaxşı edəcək ki, yenidən düzəltməyə ehtiyac qalmasın. Eyni kodu təkrar-təkrar yazmamaq üçün döngələr icad edilmişdir. Təsəvvür edək ki, konsolda 0-dan 99-a qədər rəqəmləri göstərməliyik. Döngü olmadan kod:
System.out.println(0);
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
// And so on
Bu kod 100 sətir çəkəcək! Bu qədər. Və bu, bir döngə ilə necə görünəcək:
for(int i = 0; i < 100; i++) {
System.out.println(i);
}
Cəmi 3 sətir!
Döngələr üçün nədir?
For loop alqoritmin icrasının xəttini pozan və göstərilən kodu dəfələrlə yerinə yetirməyə imkan verən proqram kodunun idarəetmə strukturudur. Məsələn, 30 damcı dərman qəbul etmək lazımdır. Alqoritm bu kimi bir şey olacaq:- Bir stəkan hazırlayın.
- Qapağı açın.
- 1 damcı alın.
- 2 damcı alın. ...
- 30 damcı alın.
- Dərmanı bağlayın.
- Alınan hissəni götürün.
- Bir stəkan hazırlayın.
- Damcı qapağını açın.
- 30 damcı alın.
- Dərmanı bağlayın.
- Alınan hissəni götürün.
For loop necə işləyir
For loop aşağıdakı kimi istifadə olunur:for(<начальная точка>; <condition выхода>; <операторы счетчика>) {
// Loop body
}
Пример перебора цифр от 0 до 5 и вывод каждой в консоль:
for(int i = 0; i < 5; i++) {
System.out.println(i);
}
Nəticə:
0
1
2
3
4
Bu girişi insan dilinə tərcümə etsək, aşağıdakıları əldə edirik: “ İlkin dəyəri 0 olan i dəyişənini 5-ə çatana qədər yaradın, ona 1 əlavə edin və hər addımda konsola i dəyərini yazın .” Java-da for döngəsi üç mərhələyə əsaslanır və onu aşağıdakı diaqramla göstərmək olar: Döngədən çıxmaq şərti Boolean ifadəsidir. Əgər yalan olarsa, dövrə bitəcək. Yuxarıdakı misalda dəyişən i
1 artırılır. Əgər onun dəyəri 5-dən azdırsa, dövrə davam edir. Ancaq i
5-dən böyük və ya bərabər olduqda, dövr dayanacaq. Sayğac operatoru sayğac dəyişəni üzərində çevrilmə həyata keçirən ifadədir. Yuxarıdakı misalda dəyişən i
1 artırıldı. Yəni, döngə düz 5 dəfə yerinə yetiriləcək. Sayğac operatoru dəyişənə 2 əlavə edərsə i
, nəticə fərqli olacaq:
for(int i = 0; i < 5; i = i + 2) {
System.out.println(i);
}
Nəticə:
0
2
4
Siz həmçinin dəyişəni çoxalda, bölmək, gücə yüksəltmək, ümumiyyətlə, istədiyinizi edə bilərsiniz. Əsas odur ki, transformasiya bir sıra ilə nəticələnir. Döngənin gövdəsi icra oluna bilən istənilən koddur. Yuxarıdakı misalda döngənin gövdəsi i dəyişəninin dəyərini konsola çıxarırdı, lakin bu gövdənin məzmunu tapşırıq və təxəyyüllə məhdudlaşır. Bütün sxemi ümumiləşdirsək, bunun for döngüsünün prinsipi belədir: döngənin gövdəsində olan kod, döngədən çıxmaq şərtinə çatana qədər sayğac operatorunun həyata keçirəcəyi çevrilmələrin sayı qədər yerinə yetiriləcəkdir. . Döngədən çıxış şərtini təyin etsəniz true
:
for(int i = 0; true; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
unreachable statement
Sonra döngədən sonrakı kod heç vaxt yerinə yetirilməyəcəyi üçün xəta ilə qeyd olunacaq . İxtiraçılıq üçün problem: aşağıdakı kodun işlədilməsi nəticəsində Loop ended
konsola “ ” çıxacaq, yoxsa dövrə sonsuz işləyəcək?
for(int i = 0; i > -1; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
Cavab: olacaq. i dəyişəni gec-tez maksimum dəyərinə çatacaq və daha da artım onu maksimum mənfi qiymətə çevirəcək, nəticədə çıxış şərti ödəniləcək (i < = -1).
forHər bir döngə
Döngələrlə işləyərkən bəzən massivlər və ya kolleksiyalar üzərində təkrarlamalı olursunuz. Tipik olaraq, for loopundan istifadə edərək massiv vasitəsilə təkrarlaya bilərsiniz:public void printAllElements(String[] stringArray) {
for(int i = 0; i < stringArray.length; i++) {
System.out.println(stringArray[i]);
}
}
Və doğrudur. Bununla belə, massivin bütün elementlərini bir-bir təkrarlamaq üçün onlar forEach konstruksiyası ilə gəldilər. Onun imzası belədir:
for(<Тип element> <Name переменной, куда будет записан очередной элемент> : <Название массива>) {
// Loop body
}
Siz bir sıra sətirləri təkrarlaya və hər birini aşağıdakı şəkildə konsolda çap edə bilərsiniz:
public void printAllElements(String[] stringArray) {
for(String s : stringArray) {
System.out.println(s);
}
}
Həm də qısa və yığcam. Ən əsası, sayğac və çıxış vəziyyəti haqqında düşünməyə ehtiyac yoxdur, artıq hər şey bizim üçün edilir.
For döngələrindən necə istifadə olunur
İndi müxtəlif problemləri həll etmək üçün Java-da for loopundan istifadə etməklə bağlı bir neçə nümunəyə baxaq.Əks dövr (böyükdən kiçiyə)
for(int i = 5; i > 0; i--) {
System.out.println(i);
}
Nəticə:
5
4
3
2
1
Bir neçə dəyişən və döngə gövdəsində sayğacın artırılması
Siz for döngəsində çoxlu dəyişənlərdən istifadə edə bilərsiniz, məsələn, onlar əks ifadəyə çevrilə bilər:int a = 0;
for(int i = 5; i > 0; i--, a++) {
System.out.print("Step: " + a + " Meaning: ");
System.out.println(i);
}
Nəticə:
Шаг: 0 Значение: 5
Шаг: 1 Значение: 4
Шаг: 2 Значение: 3
Шаг: 3 Значение: 2
Шаг: 4 Значение: 1
Və ya iki dəyişən elan edin və onlar bir-birinə bərabər olana qədər dövrə edin:
for(int i = 5, j = 11; i != j; i++, j--) {
System.out.println("i: " + i + " j: " + j);
}
Nəticə:
i: 5 j: 11
i: 6 j: 10
i: 7 j: 9
Bu hərəkətin hər hansı bir dəyəri olması ehtimalı azdır, lakin bu ehtimal haqqında bilmək faydalıdır. Siz həmçinin for loop daxilində daxili döngələr yarada bilərsiniz. Bu vəziyyətdə, döngə addımlarının sayı vurulacaq:
for(int i = 0; i < 5; i++) {
System.out.print(i + " | ");
for(int j = 0; j < 5; j++) {
System.out.print(j + " ");
}
System.out.print('\n');
}
Nəticə:
0 | 0 1 2 3 4
1 | 0 1 2 3 4
2 | 0 1 2 3 4
3 | 0 1 2 3 4
4 | 0 1 2 3 4
Sayğac döngəsində j
xarici döngənin sayğacına daxil olmaq mümkündür. Bu, iç-içə döngələri ikiölçülü, üçölçülü və digər massivləri keçmək üçün ideal bir üsul halına gətirir:
int[][] array = { {0, 1, 2, 3, 4 },
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}};
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.print('\n');
}
Nəticə:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
Dövrün erkən tamamlanması
Döngəni emal edərkən bir döngəni kəsmək lazımdırsa, operatordan istifadə edinbreak
, döngənin cari gövdəsini dayandırır. Bütün sonrakı təkrarlamalar da atlanır:
public void getFirstPosition(String[] stringArray, String element) {
for (int i = 0; i < stringArray.length; i++) {
if(stringArray[i].equals(element)) {
System.out.println(i);
break;
}
}
}
Metod serialda ilk axtarılan elementin mövqeyini çap edəcək:
String[] array = {"one", "two", "three", "Jeronimo"};
getFirstPosition(array, "two");
Nəticə:
1
Sonsuz dövr
Sonsuz for loopu yaratmağın başqa bir yolu sayğac bəyannamə sahəsini, çıxış şərtini və əks bəyanatı boş qoymaqdır:for (;;) {
}
Ancaq unutmayın ki, əksər hallarda sonsuz döngə məntiqi səhvin sübutudur. Belə bir döngənin çıxış şərti olmalıdır.
GO TO FULL VERSION