معرفی
اولین برنامه های ما دنباله ای از دستورالعمل ها بودند که یکی پس از دیگری اجرا می شدند. بدون چنگال این HelloWorld است که یک عبارت تبریک و محاسبات حسابی را به کنسول ارسال می کند. بعد از اولین برنامه ها شاخه بندی را یاد گرفتیم یعنی برنامه بسته به شرایط اعمال خاصی را انجام می داد. در اینجا نحوه کدگذاری تهویه مطبوع برای روشن شدن برای گرمایش و سرمایش آورده شده است:if (tempRoom>tempComfort)
airConditionerOn();
if (tempRoom<tempComfort
heaterOn();
بیایید قدم بعدی را برداریم. در زندگی روزمره، ما اغلب کارهای یکنواخت و تکراری انجام می دهیم، به عنوان مثال، پوست کندن سیب برای پای. این فرآیند جذاب را می توان اینگونه توصیف کرد:
-
اگر سیب در حوضه وجود دارد، مراحل 1.1 تا 1.4 را دنبال کنید:
- 1.1. یک سیب بردار
- 1.2. آن را تمیز کرده و برش بزنید
- 1.3. روی پایه شیرینی کیک را در ماهیتابه قرار دهید
- 1.4. بیایید به مرحله 1 برگردیم.
- بیایید خودمان را به تعداد سیبها گره بزنیم، اما اگر تعداد کمی از آنها داشته باشیم، برخی از دستورات بیهوده بدون "بار بار" اجرا میشوند (و شاید در حین کندن پوست یک سیب موجود، خودمان را قطع کنیم).
- اگر تعداد سیبها از تیمهای پردازش ما بیشتر باشد، برخی از محصولات فرآوری نشده باقی میمانند.
- خواندن چنین "کدی" دشوار است، حاوی تکرارهای زیادی است و تغییر آن دشوار است.
حلقه ها عملگرهایی برای انجام چندین بار اعمال هستند.
حلقه 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 بروید.
- اگر شرط منطقی نادرست باشد، به اولین عبارت خارج از حلقه 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 (Логическое выражение);
به شرح زیر انجام می شود (مراحل):
- بدنه حلقه (بلافاصله بعد از کلمه کلیدی do) اجرا می شود.
- ما شرط بولی را که در پرانتزها دنبال می شود، ارزیابی می کنیم.
- اگر شرط منطقی درست است، به مرحله 1 بروید
- اگر شرط منطقی نادرست باشد، به اولین عبارت خارج از حلقه while می رویم.
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.4 را دنبال کنید:
- 1.1. یک سیب بردار
- 1.2. آن را تمیز کرده و برش بزنید
- 1.3. روی پایه شیرینی کیک را در ماهیتابه قرار دهید
- 1.4. بیایید به مرحله 1 برگردیم.
- تعداد برش ها = 0
-
در حالی که تعداد برش ها کمتر از 12 است، مراحل 2.1 تا 2.3 را دنبال کنید
- 2.1. یک برش دیگر از یک سیب برش دهید
- 2.2. تعداد برش ها ++
- 2.3. به مرحله 2 برگردید
-
اگر سیب در حوضچه وجود دارد، مراحل 1.1 تا 1.6 را دنبال کنید:
- 1.1. یک سیب بردار
- 1.2. پوست آن را جدا کنید
- 1.3. تعداد برش ها = 0
- 1.4. Пока число долек < 12, выполнить шаги с 1.4.1 по 1.4.3
- 1.4.1. Отрезать очередную дольку от яблока
- 1.4.2. Кол-во долек ++ 1.4.3. Возвращаемся на шаг 1.4
- 1.5. Помещаем дольки на тестовое основание пирога из теста на сковороде
- 1.6. Возвращаемся на шаг 1.
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, вы изучите все их разнообразие, разберёте тонкости функционирования и получите практические навыки их применения.
GO TO FULL VERSION