JavaRush /وبلاگ جاوا /Random-FA /در حالی که در جاوا حلقه بزنید

در حالی که در جاوا حلقه بزنید

در گروه منتشر شد

معرفی

اولین برنامه های ما دنباله ای از دستورالعمل ها بودند که یکی پس از دیگری اجرا می شدند. بدون چنگال این HelloWorld است که یک عبارت تبریک و محاسبات حسابی را به کنسول ارسال می کند. بعد از اولین برنامه ها شاخه بندی را یاد گرفتیم یعنی برنامه بسته به شرایط اعمال خاصی را انجام می داد. در اینجا نحوه کدگذاری تهویه مطبوع برای روشن شدن برای گرمایش و سرمایش آورده شده است:
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 دست و یک چاقو دارید. در زندگی، شما به طور مداوم کل ده را با همان الگوریتم هدایت می کنید. چگونه می توانید برنامه را مجبور به انجام یک عمل تکراری با هر سیب کنید؟
  • بیایید خودمان را به تعداد سیب‌ها گره بزنیم، اما اگر تعداد کمی از آنها داشته باشیم، برخی از دستورات بیهوده بدون "بار بار" اجرا می‌شوند (و شاید در حین کندن پوست یک سیب موجود، خودمان را قطع کنیم).
  • اگر تعداد سیب‌ها از تیم‌های پردازش ما بیشتر باشد، برخی از محصولات فرآوری نشده باقی می‌مانند.
  • خواندن چنین "کدی" دشوار است، حاوی تکرارهای زیادی است و تغییر آن دشوار است.

حلقه ها عملگرهایی برای انجام چندین بار اعمال هستند.

حلقه Java while (حلقه بد) در مورد ما به خوبی کار می کند. این طرح اقدامات متعدد را در یک ساختار مختصر و قابل درک سازماندهی می کند. یک الگوریتم while برای برش سیب برای پای در جاوا ممکن است به شکل زیر باشد:
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
به تغییرات کد توجه کنید و آن را با نسخه حلقه با پیش شرط مقایسه کنید.

حقایق جالب در مورد کار با حلقه ها

دستورات را در بدنه حلقه کنترل کنید

دو دستور وجود دارد که بر پیشرفت حلقه تأثیر می گذارد: break که ویژگی های آن را در فصل بعدی نشان خواهیم داد و ادامه هید.
  • ادامه - اجرای بدنه حلقه جاری را متوقف می کند و به بیان منطقی عملگر 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اغلب زمانی استفاده می شود که در بدنه یک حلقه لازم است دستورات زمانی که شرایط خاصی رخ می دهد اجرا شود، به عنوان مثال، برای انجام اقدامات هنگام فعال شدن سنسور در تجهیزات (در غیر این صورت فقط چرخه خواندن نشانگرهای آن را ادامه دهید) یا برای محاسبه یک عبارت فقط در مراحل خاصی از چرخه. مثالی برای آخرین مورد، محاسبه در حلقه 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

حلقه های تو در تو

در اینجا به موضوع نهایی در مورد چرخه های خود می رسیم. بیایید به پای سیب (امیدواریم در حال حاضر گرسنه نباشید) و "حلقه" خود فکر کنیم:
  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