JavaRush /Блоги Java /Random-TG /Дар ҳоле ки ҳалқа дар Java

Дар ҳоле ки ҳалқа дар Java

Дар гурӯҳ нашр шудааст

Муқаддима

Барномаҳои аввалини мо як қатор дастурҳо буданд, ки паси дигар иҷро мешуданд. Не чангак. Ин HelloWorld аст, ки ибораи табрикотӣ ва ҳисобҳои арифметикиро ба консол мебарорад. Пас аз барномањои аввал мо шохањоро ёд гирифтем, яъне барнома вобаста ба шароит амалњои муайянеро иљро мекард. Ин аст, ки чӣ тавр шумо метавонед кондитсионерро барои гармкунӣ ва хунуккунӣ фаъол созед:
if (tempRoom>tempComfort)
    airConditionerOn();
if (tempRoom<tempComfort
    heaterOn();
Биёед қадами ояндаро гузорем. Дар ҳаёти ҳаррӯза мо аксар вақт амалҳои якрангу такроршавандаро иҷро мекунем, масалан, пӯсти себ барои пирог. Ин раванди ҷолибро метавон чунин тавсиф кард:
  1. Агар дар ҳавза себ мавҷуд бошад, пас қадамҳои 1.1 то 1.4-ро иҷро кунед:

    1. 1.1. Себ гиред
    2. 1.2. Онро тоза ва бурида ба бурида
    3. 1.3. Дар асоси пирожни қаннодӣ дар як табақи frying ҷойгир кунед
    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 диққат диҳед, онро бо versionи ҳалқа бо шарти пешакӣ муқоиса кунед.

Далелҳои ҷолиб дар бораи кор бо ҳалқаҳо

Фармонҳои идоракунӣ дар бадани давр

Ду фармоне вуҷуд дорад, ки ба пешрафти гардиш таъсир мерасонанд: break, ки хусусиятҳои онҳоро мо дар боби оянда нишон медиҳем ва давом додан.
  • идома - иҷрои ҷасади даври ҷорӣро қатъ мекунад ва ба ифодаи мантиқии оператори while мегузарад. Агар ифодаи ҳисобшуда дуруст бошад, иҷрои давра идома меёбад.
  • танаффус - фавран иҷроиши даври ҷорӣро қатъ мекунад ва ба фармони аввал берун аз он мегузарад. Ҳамин тариқ, иҷрои ҳалқаи ҷорӣ қатъ мешавад. Мо онро дар мавзӯи оянда муфассалтар дида мебароем.
Биёед мисоли меваи худро ба ёд орем. Агар мо ба сифати себҳои пешниҳодшуда боварӣ надорем, мо метавонем 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аксар вақт истифода мешавад, вақте ки дар бадани ҳалқа ҳангоми ба амал омадани ҳолати муайян иҷро кардани фармонҳо лозим аст, масалан, барои иҷрои амалҳо ҳангоми ба кор андохтани сенсор дар таҷҳизот (дар акси ҳол танҳо цикли хондани нишондиҳандаҳои онро идома диҳед) ё барои ҳисоб кардани ифода танҳо дар марҳилаҳои муайяни давра. Намунаи ҳолати охирин ин ҳисоб кардани маҷмӯи мукаабҳои ададҳои натуралӣ дар даври while мебошад, ки квадраташон аз шумораи онҳо камтар аст:
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
}

Давраи беохир

Ин фармонҳои идоракунӣ бештар дар як ҳалқаи беохир истифода мешаванд. Ин чунин ном дорад, зеро шарти баромади мантиқӣ ҳеҷ гоҳ қонеъ карда намешавад. Дар code он чизе монанди:
while(true) {
    // Loop body
}
breakДар ин ҳолат, истифодаи фармон барои ташкor баромадан аз он муфид хоҳад буд . Ин намуди ҳалқа ҳангоми интизории шароитҳои беруна, ки берун аз мантиқи ҷисми ҳалқа ташкил мешаванд, ба амал меояд. Масалан, дар бозиҳое, ки ба ҷаҳони маҷозӣ дар атрофи қаҳрамон тақлид мекунанд (баромадан аз ҳалқа = баромадан аз бозӣ), системаҳои оператсионӣ. Ё ҳангоми истифодаи алгоритмҳо, эҳтимолан беҳтар кардани натиҷа бо ҳар як занги минбаъда дар давр, вале маҳдуд кардани онҳо аз рӯи вақт ё рух додани ҳодисаи беруна (шашка, шоҳмот ё пешгӯии обу ҳаво). Дар хотир бояд дошт, ки дар шароити муқаррарӣ ҳалқаҳои беохир яке аз мушкилоти ноустувории барнома мебошанд. Барои нишон додан, биёед ба қудрати рақамҳо баргардем:
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