JavaRush /Java Blog /Random-TK /Java-da aýlaw

Java-da aýlaw

Toparda çap edildi

Giriş

Ilkinji programmalarymyz birin-birin ýerine ýetirilýän görkezmeleriň yzygiderliligi boldy. Çeňňek ýok. Bu “SalamWorld”, konsola gutlag sözüni we arifmetiki hasaplamalary çykarýar. Ilkinji programmalardan soň, filial etmegi öwrendik, ýagny programma şertlere baglylykda belli bir hereketleri etdi. Heatingyladyş we sowatmak üçin kondisioneri nädip kodlap bilersiňiz:
if (tempRoom>tempComfort)
    airConditionerOn();
if (tempRoom<tempComfort
    heaterOn();
Indiki ädim äteliň. Gündelik durmuşda köplenç monoton, gaýtalanýan hereketleri ýerine ýetirýäris, mysal üçin, alma pirogy üçin gabyk. Bu haýran galdyryjy prosesi şeýle düşündirip bolar:
  1. Basseýnde alma bar bolsa, 1.1-den 1.4-nji ädimlere eýeriň:

    1. 1.1. Alma al
    2. 1.2. Arassalaň we dilimlere bölüň
    3. 1.3. Konditer pirogynyň düýbüne gowurmaly
    4. 1.4. 1-nji ädime gaýdyp geleliň.
Operator - 2
10 alma, 2 el we bir pyçak bar diýeliň. Durmuşda, şol bir algoritmiň kömegi bilen tutuş on zady yzygiderli arassalaýarsyňyz. Programmany nädip her alma bilen gaýtalap hereket edip bilersiňiz?
  • Alma sanyna özümizi baglalyň, ýöne olardan az bolsa, käbir buýruklar “ýük götermezden” biderek ýerine ýetirilerdi (we, belki, ýok bolan almany gabykda keseris).
  • Gaýtadan işleýän toparlarymyzdan has köp alma bar bolsa, käbir önümler gaýtadan işlenmezdi.
  • Şeýle “kod” okamak kyn, köp gaýtalanmalary öz içine alýar we üýtgetmek kyn.

Aýlawlar birnäçe gezek amallary ýerine ýetirmek üçin operatorlardyr.

“Java” aýlaw (vile loop) biziň ýagdaýymyzda gowy işleýär. Bu dizaýn, gysga we düşnükli gurluşa birnäçe hereketi guraýar. Java-da tort üçin alma dilimlemek üçin birneme algoritm şeýle bolup biler:
while(числоЯблокВТазике>0) {
    яблоко = тазик.взятьОчередноеЯблоко();
    положитьВПирог(яблоко.чистить().нарезать());
    числоЯблокВТазике--;//-- this is a decrement, reduces the number of apples by one
}
System.out.println('Apples for the pie are processed.');

Buýruk sintaksis

Wagtlaýyn beýany beýan etmegiň ilkinji usuly aşakdakylardyr:
while(Логическое выражение) {
	// Loop body - periodically executed statement(s)
}
Bu aşakdaky ýaly edilýär (ädimme-ädim):
  1. Gaplaňdaky wagtyň yzyndaky Boolean ýagdaýyna baha berýäris.
  2. Logiki ýagdaý dogry bolsa, aýlaw korpusynda jümleler ýerine ýetirilýär, aýlaw jisimindäki iň soňky jümläni ýerine ýetireniňizden soň, 1-nji ädime geçiň.
  3. Logiki ýagdaý ýalňyş bolsa, wagt aýlawynyň daşyndaky birinji jümle geçýäris.

Öňünden şert

Aýlawyň göwresini ýerine ýetirmezden ozal, elmydama logiki aňlatmany (aýlawyň içine girmegiň şerti) öňünden hasaplaýarys, bu görnüşe köplenç şert bilen aýlaw diýilýär. Geliň, ilkinji on sany bitewi, sanyň oňyn güýji bolan tablisany guralyň:
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++;
    }
}
Konsol çykyş netijesi:
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

Poçta şerti bilen aýlaw

Ikinji aýlaw:
do {
    // Loop body - periodically executed statement(s)
}while (Логическое выражение);
Aşakdaky ýaly ýerine ýetirildi (ädimler):
  1. Aýlawyň göwresi ýerine ýetirilýär (açar sözden soň derrew).
  2. Gaplaňdaky wagtyň yzyndaky Boolean ýagdaýyna baha berýäris.
  3. Logiki ýagdaý dogry bolsa, 1-nji ädime geçiň
  4. Logiki ýagdaý ýalňyş bolsa, wagt aýlawynyň daşyndaky birinji jümle geçýäris.
Öňki aýlaw görnüşinden iki esasy tapawut: aýlawyň göwresi azyndan bir gezek ýerine ýetirilýär we aýlawyň göwresi ýerine ýetirilenden soň logiki ýagdaý barlanýar. Şol sebäpden, aýlawyň bu görnüşine postkondision aýlaw diýilýär. Bu gezek 10000-den geçmeýän sanlaryň güýç tablisasyny görkezeris:
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
Konsol çykyş netijesi:
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
Koddaky üýtgeşmelere üns beriň, ony deslapky şert bilen aýlawyň wersiýasy bilen deňeşdiriň.

Aýlawlar bilen işlemek hakda gyzykly maglumatlar

Aýlawyň göwresindäki dolandyryş buýruklary

Aýlawyň gidişine täsir edýän iki buýruk bar: arakesme, indiki bapda görkezjek aýratynlyklarymyz we dowam et.
  • dowam et - häzirki aýlawyň korpusynyň ýerine ýetirilmegini togtadýar we şol wagt operatoryň logiki aňlatmasyna geçýär. Hasaplanan aňlatma dogry bolsa, aýlawyň ýerine ýetirilmegi dowam eder.
  • break - häzirki aýlawyň ýerine ýetirilişini derrew togtadýar we daşyndaky birinji buýruga geçýär. Şeýlelik bilen, häzirki aýlawyň ýerine ýetirilmegi kesilýär. Indiki mowzukda has jikme-jik serederis.
Miwe mysalymyzy ýada salalyň. Hödürlenýän almalaryň hiline ynamymyz ýok bolsa, buýrugy ulanyp kody üýtgedip bilerdik 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
    }
    положитьВПирог(яблоко.чистить().нарезать());
}
Gurluşyk continueköplenç aýlawyň göwresinde belli bir ýagdaý ýüze çykanda buýruklary ýerine ýetirmek zerur bolanda ulanylýar, mysal üçin, enjamdaky datçik işledilende hereketleri ýerine ýetirmek zerur (ýa-da diňe görkezijilerini okamagyň dowamyny dowam etdiriň) ýa-da aňlatmany diňe sikliň belli ädimlerinde hasaplamak. Iň soňky mysal üçin mysal, kwadraty olaryň sanyndan az bolan tebigy sanlaryň kublarynyň jemini wagtlaýyn hasaplamakdyr:
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
}

Tükeniksiz aýlaw

Bu dolandyryş buýruklary köplenç çäksiz aýlawda ulanylýar. Muňa şeýle diýilýär, sebäbi logiki çykyş şerti hiç wagt kanagatlandyrylmaýar. Kodda bir zat görünýär:
while(true) {
    // Loop body
}
breakBu ýagdaýda, çykyşy guramak üçin buýruk ulanmak peýdaly bolar . Bu aýlaw halkanyň logikasynyň daşynda emele gelýän daşarky şertlere garaşanda ýüze çykýar. Mysal üçin, gahrymanyň töweregindäki wirtual dünýäni emele getirýän oýunlarda (aýlawdan çykmak = oýundan çykmak) operasiýa ulgamlary. Ora-da algoritmleri ulananyňyzda, belki, aýlawdaky her bir jaň bilen netijäni gowulaşdyryp bilersiňiz, ýöne wagt ýa-da daşarky hadysanyň ýüze çykmagy bilen çäklenýär (şaşka, küşt ýa-da howa maglumaty). Adaty şertlerde tükeniksiz aýlawlar programmanyň durnuksyzlygynyň meselelerinden biridir. Görkezmek üçin, sanlaryň güýjüne gaýdyp geleliň:
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
    }
}
Konsol çykyş netijesi:
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

Öýlenen aýlawlar

Ynha, aýlawlarymyz barada soňky mowzuga gelýäris. Alma pirogy (şu wagt aç dälsiňiz) we "aýlawymyz" hakda pikir edeliň:
  1. Basseýnde alma bar bolsa, 1.1-den 1.4-nji ädimlere eýeriň:

    1. 1.1. Alma al
    2. 1.2. Arassalaň we dilimlere bölüň
    3. 1.3. Konditer pirogynyň düýbüne gowurmaly
    4. 1.4. 1-nji ädime gaýdyp geleliň.
Dilimlere kesmek prosesini has jikme-jik beýan edeliň:
  1. Dilimleriň sany = 0
  2. Dilimleriň sany <12 bolsa-da, 2.1-den 2.3-nji ädimlere eýeriň

    1. 2.1. Alma başga bir dilim kesiň
    2. 2.2. Dilimleriň sany ++
    3. 2.3. 2-nji ädime dolan
Ony konditer önümler algoritmimize salyň:
  1. Basseýnde alma bar bolsa, onda 1.1-den 1.6-a çenli ädimleri ýerine ýetiriň:

    1. 1.1. Alma al
    2. 1.2. Sowuň
    3. 1.3. Dilimleriň sany = 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-х видели на обложках тетрадей в младших классах.
Operator - 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, вы изучите все их разнообразие, разберёте тонкости функционирования и получите практические навыки их применения.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION