Кіріспе
Біздің алғашқы бағдарламаларымыз бірінен соң бірі орындалатын нұсқаулар тізбегі болды. Шанышқылар жоқ. Бұл консольге сәлемдесу фразасын және арифметикалық есептеулерді шығаратын HelloWorld. Алғашқы бағдарламалардан кейін біз тармақталуды үйрендік, яғни бағдарлама шарттарға байланысты белгілі бір әрекеттерді орындады. Жылыту және салқынdate үшін кондиционерді қосу үшін codeты мына жолмен көрсетуге болады:if (tempRoom>tempComfort)
airConditionerOn();
if (tempRoom<tempComfort
heaterOn();
Келесі қадамды жасайық. Күнделікті өмірде біз жиі монотонды, қайталанатын әрекеттерді орындаймыз, мысалы, бәліш үшін алма қабығын тазарту. Бұл қызықты процесті келесідей сипаттауға болады:
-
Егер бассейнде алма болса, 1.1-1.4 қадамдарын орындаңыз:
- 1.1. Алма алыңыз
- 1.2. Оны тазалап, текшелерге кесіңіз
- 1.3. Қуыруға арналған табада кондитерлік пирогтың негізіне салыңыз
- 1.4. 1-қадамға оралайық.
- Өзімізді алма санына байлап қояйық, бірақ аз болса, кейбір командалар «пайдасыз» бекер орындалатын еді (мүмкін, жоқ алманың қабығын аршып отырып, өзімізді кесіп алар едік).
- Біздің өңдеуші топтардан алма көп болса, кейбір өнімдер өңделмей қалады.
- Мұндай «codeты» оқу қиын, қайталанулары көп және өзгерту қиын.
Циклдер әрекеттерді бірнеше рет орындауға арналған операторлар болып табылады.
Java while циклі (жеңіл цикл) біздің жағдайда жақсы жұмыс істейді. Бұл дизайн бірнеше әрекеттерді қысқа және түсінікті құрылымға ұйымдастырады. Java тіліндегі бәліш үшін алмаларды кесу алгоритмі келесідей болуы мүмкін:while(числоЯблокВТазике>0) {
яблоко = тазик.взятьОчередноеЯблоко();
положитьВПирог(яблоко.чистить().нарезать());
числоЯблокВТазике--;//-- this is a decrement, reduces the number of apples by one
}
System.out.println('Apples for the pie are processed.');
Команда синтаксисі
while операторын сипаттаудың бірінші жолы келесідей:while(Логическое выражение) {
// Loop body - periodically executed statement(s)
}
Бұл келесідей орындалады (қадаммен):
- Жақшадағы әзірден кейінгі логикалық шартты бағалаймыз.
- Егер логикалық шарт ақиқат болса, онда цикл денесіндегі операторлар орындалады, цикл денесіндегі соңғы операторды орындағаннан кейін 1-қадамға өтіңіз.
- Егер логикалық шарт жалған болса, онда while циклінің сыртындағы бірінші операторға өтеміз.
Алдын ала шарты бар цикл
Цикл денесін орындамас бұрын біз әрқашан логикалық өрнекті (циклге кіру шартын) алдын ала есептейтіндіктен, while-дың бұл түрін көбінесе алғы шарты бар цикл деп атайды. Бірінші он бүтін санның, санның оң дәрежелерінің кестесін құрастырайық: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++;
}
}
Консоль шығару нәтижесі:
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
Постшартпен цикл
Циклдің екінші түрі:do {
// Loop body - periodically executed statement(s)
}while (Логическое выражение);
Төмендегідей орындалады (қадамдар):
- Циклдің денесі орындалады (do кілт сөзінен кейін бірден).
- Жақшадағы әзіршеден кейінгі логикалық шартты бағалаймыз.
- Логикалық шарт ақиқат болса, 1-қадамға өтіңіз
- Егер логикалық шарт жалған болса, онда while циклінің сыртындағы бірінші операторға өтеміз.
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
Консоль шығару нәтижесі:
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
Алғы шарты бар цикл нұсқасымен салыстыра отырып, codeтағы өзгерістерге назар аударыңыз.
Циклдермен жұмыс істеу туралы қызықты деректер
Цикл денесіндегі басқару командалары
Циклдің жүру барысына әсер ететін екі пәрмен бар: үзіліс, оның мүмкіндіктерін келесі тарауда көрсетеміз және- жалғастыру – ағымдағы цикл денесінің орындалуын тоқтатады және while операторының логикалық өрнегіне көшеді. Есептелген өрнек ақиқат болса, циклдің орындалуы жалғасады.
- break – ағымдағы циклдің орындалуын дереу тоқтатады және оның сыртындағы бірінші командаға өтеді. Осылайша, ағымдағы циклдің орындалуы үзіледі. Оны келесі тақырыпта толығырақ қарастырамыз.
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
}
положитьВПирог(яблоко.чистить().нарезать());
}
Конструкция
continue
көбінесе контурдың корпусында белгілі бір жағдай туындаған кезде командаларды орындау қажет болғанда қолданылады, мысалы, жабдықтағы сенсор іске қосылған кезде әрекеттерді орындау үшін (әйтпесе оның көрсеткіштерін оқу циклін жалғастырыңыз) немесе өрнекті циклдің белгілі бір қадамдарында ғана есептеу үшін. Соңғы жағдайға мысал ретінде квадраты олардың санынан кіші натурал сандардың текшелерінің қосындысын уақытша циклде есептеу болып табылады:
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
}
Шексіз цикл
Бұл басқару командалары көбінесе шексіз циклде қолданылады. Логикалық шығу шарты ешқашан орындалмағандықтан осылай аталады. Кодта ол келесідей көрінеді:while(true) {
// Loop body
}
break
Бұл жағдайда одан шығуды ұйымдастыру үшін пәрменді пайдалану пайдалы болады . Циклдің бұл түрі цикл денесінің логикасынан тыс қалыптасатын сыртқы жағдайларды күткенде пайда болады. Мысалы, кейіпкердің айналасындағы виртуалды әлемді эмуляциялайтын ойындарда (циклдан шығу = ойыннан шығу), операциялық жүйелер. Немесе алгоритмдерді пайдаланған кезде, мүмкін циклдегі әрбір келесі шақырумен нәтижені жақсарту, бірақ оларды уақытпен немесе сыртқы оқиғаның (дойбы, шахмат немесе ауа райын болжау) болуымен шектейді. Қалыпты жағдайда шексіз циклдар бағдарламаның тұрақсыздығы мәселелерінің бірі екенін есте ұстаған жөн. Көрсету үшін сандардың дәрежелеріне оралайық:
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
}
}
Консоль шығару нәтижесі:
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
Кірістірілген циклдар
Міне, біз циклдер туралы соңғы тақырыпқа келдік. Алма пирогы (қазір аш емеспіз деп үміттенеміз) және біздің «ілмек» туралы ойланайық:-
Егер бассейнде алма болса, 1.1-1.4 қадамдарын орындаңыз:
- 1.1. Алма алыңыз
- 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