JavaRush /Java блогу /Random-KY /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. Тазалап, тorмдерге кесип
    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дын бул түрү көбүнчө шарты бар цикл деп аталат. Биринчи он бүтүн сандын tableсын түзөлү, сандын оң даражасы:
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ден ашпаган сандын кубаттуулуктарынын tableсын көрсөтөбүз:
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
Коддогу өзгөрүүлөргө көңүл буруңуз, аны циклдин шарты менен versionсы менен салыштырыңыз.

Илмек менен иштөө боюнча кызыктуу фактылар

Циклдин денесиндеги башкаруу командалары

Циклдин жүрүшүнө таасир этүүчү эки буйрук бар: break, анын өзгөчөлүктөрүн кийинки бөлүмдө көрсөтөбүз жана улантуу.
  • улантуу – учурдагы циклдин корпусунун аткарылышын токтотот жана 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көбүнчө циклдин корпусунда белгилүү бир шарт пайда болгондо буйруктарды аткаруу керек болгондо колдонулат, мисалы, жабдуулардагы сенсор иштетилгенде иш-аракеттерди аткаруу үчүн (антпесе жөн гана анын индикаторлорун окуу циклин улантуу) же циклдин белгилүү кадамдарында гана туюнтманы эсептөө. Акыркы учурга мисал катары, квадраты алардын санынан аз болгон натурал сандардын кубтарынын суммасын 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
}

Чексиз цикл

Бул башкаруу буйруктары көбүнчө чексиз циклде колдонулат. Бул логикалык чыгуу шарты эч качан канааттандырылбагандыктан деп аталат. Коддо ал төмөнкүдөй көрүнөт:
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

Insted Loops

Бул жерде биз циклдерибиз жөнүндө акыркы темага келдик. Келгиле, алма пирогуна (азыр ачка эмессиз деп үмүттөнөбүз) жана биздин "укурук" жөнүндө ойлонуп көрөлү:
  1. Эгер бассейнде алма бар болсо, 1.1-1.4 кадамдарды аткарыңыз:

    1. 1.1. Алма ал
    2. 1.2. Тазалап, тorмдерге кесип
    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