JavaRush /Java блогы /Random-KK /Java тіліндегі while циклі

Java тіліндегі while циклі

Топта жарияланған

Кіріспе

Біздің алғашқы бағдарламаларымыз бірінен соң бірі орындалатын нұсқаулар тізбегі болды. Шанышқылар жоқ. Бұл консольге сәлемдесу фразасын және арифметикалық есептеулерді шығаратын HelloWorld. Алғашқы бағдарламалардан кейін біз тармақталуды үйрендік, яғни бағдарлама шарттарға байланысты белгілі бір әрекеттерді орындады. Жылыту және салқынdate үшін кондиционерді қосу үшін codeты мына жолмен көрсетуге болады:
if (tempRoom>tempComfort)
    airConditionerOn();
if (tempRoom<tempComfort
    heaterOn();
Келесі қадамды жасайық. Күнделікті өмірде біз жиі монотонды, қайталанатын әрекеттерді орындаймыз, мысалы, бәліш үшін алма қабығын тазарту. Бұл қызықты процесті келесідей сипаттауға болады:
  1. Егер бассейнде алма болса, 1.1-1.4 қадамдарын орындаңыз:

    1. 1.1. Алма алыңыз
    2. 1.2. Оны тазалап, текшелерге кесіңіз
    3. 1.3. Қуыруға арналған табада кондитерлік пирогтың негізіне салыңыз
    4. 1.4. 1-қадамға оралайық.
Оператор кезінде - 2
Сізде 10 алма, 2 қол және бір пышақ бар делік. Өмірде сіз дәл сол алгоритмді басшылыққа ала отырып, бүкіл онды үнемі тазалайсыз. Бағдарламаны әр алмамен қайталанатын әрекетті қалай жасауға болады?
  • Өзімізді алма санына байлап қояйық, бірақ аз болса, кейбір командалар «пайдасыз» бекер орындалатын еді (мүмкін, жоқ алманың қабығын аршып отырып, өзімізді кесіп алар едік).
  • Біздің өңдеуші топтардан алма көп болса, кейбір өнімдер өңделмей қалады.
  • Мұндай «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. Жақшадағы әзірден кейінгі логикалық шартты бағалаймыз.
  2. Егер логикалық шарт ақиқат болса, онда цикл денесіндегі операторлар орындалады, цикл денесіндегі соңғы операторды орындағаннан кейін 1-қадамға өтіңіз.
  3. Егер логикалық шарт жалған болса, онда 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 (Логическое выражение);
Төмендегідей орындалады (қадамдар):
  1. Циклдің денесі орындалады (do кілт сөзінен кейін бірден).
  2. Жақшадағы әзіршеден кейінгі логикалық шартты бағалаймыз.
  3. Логикалық шарт ақиқат болса, 1-қадамға өтіңіз
  4. Егер логикалық шарт жалған болса, онда while циклінің сыртындағы бірінші операторға өтеміз.
Циклдің алдыңғы түрінен екі негізгі айырмашылығы: цикл денесі кемінде бір рет орындалады және цикл денесі орындалғаннан кейін логикалық шарт тексеріледі. Сондықтан while циклінің бұл түрі постшарттық цикл деп аталады. Бұл жолы біз 10000-нан аспайтын санның дәрежелер кестесін көрсетеміз:
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 – ағымдағы циклдің орындалуын дереу тоқтатады және оның сыртындағы бірінші командаға өтеді. Осылайша, ағымдағы циклдің орындалуы үзіледі. Оны келесі тақырыпта толығырақ қарастырамыз.
Жеміс үлгісін еске түсірейік. Ұсынылған алмалардың сапасына сенімді болмасақ, codeты пәрмен арқылы өзгертуге болады 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-1.4 қадамдарын орындаңыз:

    1. 1.1. Алма алыңыз
    2. 1.2. Оны тазалап, текшелерге кесіңіз
    3. 1.3. Қуыруға арналған табада кондитерлік пирогтың негізіне салыңыз
    4. 1.4. 1-қадамға оралайық.
Кесектерге кесу процесін толығырақ сипаттайық:
  1. Кесектер саны = 0
  2. Бөлімдер саны < 12 болғанда, 2.1-2.3 қадамдарын орындаңыз

    1. 2.1. Алмадан тағы бір тілім кесіңіз
    2. 2.2. Кесектер саны ++
    3. 2.3. 2-қадамға оралыңыз
Және оны кондитерлік алгоритмімізге енгізіңіз:
  1. Егер бассейнде алма болса, 1.1-1.6 қадамдарын орындаңыз:

    1. 1.1. Алма алыңыз
    2. 1.2. Оны аршып алыңыз
    3. 1.3. Кесектер саны = 0
    4. 1.4. Пока число долек < 12, выполнить шаги с 1.4.1 по 1.4.3
      1. 1.4.1. Отрезать очередную дольку от яблока
      2. 1.4.2. Кол-во долек ++
      3. 1.4.3. Возвращаемся на шаг 1.4
    5. 1.5. Помещаем дольки на тестовое основание пирога из теста на сковороде
    6. 1.6. Возвращаемся на шаг 1.
Получor цикл в цикле. Подобные конструкции весьма частые. Для завершающего примера построим таблицу умножения, которые школьники 90-х видели на обложках тетрадей в младших классах.
Оператор кезінде - 3
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, вы изучите все их разнообразие, разберёте тонкости функционирования и получите практические навыки их применения.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION