حلقهٔ while در Java
قبل از هر حلقه، عدد صحیح ۱ را زیر نام k بگذارید. بنویسید while (k <= 3) و داخل آکولاد k را چاپ کنید، بعد k + 1 را دوباره در k نگه دارید. صفحه باید سه خط نشان دهد: ۱، بعد ۲، بعد ۳. شروع بالای while است. آزمون داخل پرانتز است. گام داخل آکولاد است. همین جدا بودن کار این صفحه است.
شروع بیرون، آزمون در while، گام داخل
یک برنامهٔ کوچک با نام Pulse.java بسازید. public class روی خط اول باید با نام فایل یکی باشد: public class Pulse. نام کلاس قدیمی Beat یا Dial را در این فایل نگه ندارید؛ کامپایلر انتظار دارد نام کلاس و نام فایل جور باشند.
داخل main، اول شمارنده را نگه دارید:
int k = 1;
این خط داخل while نیست. فقط k را از ۱ شروع میکند. بعد حلقه:
while (k <= 3) {
System.out.println(k);
k = k + 1;
}
کلمهٔ while با حرف کوچک است. داخل پرانتز فقط آزمون مینشیند: k <= 3. داخل آن پرانتز نه شروع هست نه گام — برخلاف خط for که قبلاً دیدید. آکولاد هم خط نوشتن را نگه میدارد هم گام را. System.out.println(k); عدد فعلی را بدون گیومه دور k مینویسد. بعد k = k + 1; یکی بیشتر زیر k میگذارد تا آزمون بعدی بالاخره false شود. قبل از کامپایل فایل را ذخیره کنید.
برنامهای که ۱ بعد ۲ بعد ۳ چاپ میکند
این همان نسخهای است که اول کامپایل میکنید.
public class Pulse {
public static void main(String[] args) {
int k = 1;
while (k <= 3) {
System.out.println(k);
k = k + 1;
}
}
}
در پوشهای که Pulse.java آنجاست بنویسید javac Pulse.java. وقتی پرانتز و آکولاد و نقطهویرگولها جور باشند، javac خودش خطی نمینویسد. بعد بنویسید java Pulse — نه java Pulse.java. پسوند .java را از فرمان دوم بردارید. همین دو فرمان در Windows و macOS یکی است؛ این صفحه املای پوستهٔ جدا برای هیچکدام نمیخواهد. برنامه باید سه خط چاپ کند و تمام شود: ۱، بعد ۲، بعد ۳. منتظر تایپ شما نمیماند. اگر ترمینال منتظر ماند، هنوز nextLine از تمرین قدیمی داخل فایل است. آن را پاک کنید و int بههمراه while بالا را نگه دارید. برای خط اشتباه روی صفحه لازم نیست JDK را دوباره نصب کنید.
یک اجرای کامل را به ترتیب بخوانید. k قبل از while از ۱ شروع میشود. آزمون k <= 3 برابر true است، پس بدنه اجرا میشود: println عدد ۱ را مینویسد، بعد گام ۲ را نگه میدارد. آزمون هنوز true است: ۲ را مینویسد، ۳ را نگه میدارد. آزمون هنوز true است: ۳ را مینویسد، ۴ را نگه میدارد. حالا k <= 3 برابر false است و حلقه تمام میشود. شروع یکبار، بالای حلقه، اجرا شد. آزمون قبل از هر دور. گام داخل آکولاد بعد از هر چاپ. این سه کار همان ایدههای for هستند، ولی در یک خط سرِ حلقه فشرده نشدهاند. اگر k = k + 1; را ننویسید و k برای همیشه ۱ بماند، آزمون true میماند و همان خط میتواند بدون توقف چاپ شود — بهخاطر همین روی این صفحه گام داخل بدنه میماند.
آزمون را وسیعتر کنید
فقط آزمون را عوض کنید تا حلقه یک گام دورتر برود:
int k = 1;
while (k <= 4) {
System.out.println(k);
k = k + 1;
}
شروع و گام را دست نزنید. حالا صفحه باید چهار خط نشان دهد: ۱، ۲، ۳ و ۴.
public class Pulse {
public static void main(String[] args) {
int k = 1;
while (k <= 4) {
System.out.println(k);
k = k + 1;
}
}
}
دوباره کامپایل و اجرا کنید: javac Pulse.java و بعد java Pulse. باید چهار خط ببینید. println یا گام را بازنویسی نکردید — فقط آزمون داخل while (…) عوض شد. وقتی چهار خط را دیدید، اگر میخواهید دموی اول برگردد، k <= 3 را برگردانید. هر دو نسخه Java درستاند. همان شکل while را با نقطهٔ توقف متفاوت نشان میدهند.
اجرای چهارخطی را یکبار دیگر بخوانید. k از ۱ شروع میشود. هر آزمون true مقدار فعلی k را چاپ میکند و بعد ۱ اضافه میکند. وقتی k برابر ۵ شد، آزمون برقرار نیست و حلقه میایستد. رقم ۵ در این دمو روی صفحه نمیآید، چون بدنه فقط وقتی آزمون هنوز true است اجرا میشود.
📊 مقدار k و صفحهٔ دموی اول
| k قبل از println | خط صفحه |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
جدول را بعد از دموی اول چک کنید، نه بهجای اجرا. قبل از هر println در آن دمو، k همان عددی را دارد که روی آن خط ظاهر میشود. بعد از چاپ سوم، گام ۴ را نگه میدارد و آزمون برقرار نیست. اگر در نسخهای بدون گام صفحه هرگز نایستاد، k = k + 1; را دوباره داخل آکولاد بگذارید — Java را دوباره نصب نکنید.
چند قاعده که while را روشن نگه میدارد
پرانتز دور آزمون لازم است. نوشتن while k <= 3 { … } بدون پرانتز را javac قبول نمیکند. بدنه در این صفحه همیشه داخل آکولاد میماند، چون هر دور دو خط دارد: println و گام. اگر گام را بعد از آکولاد بسته بگذارید، یکبار بعد از تمام شدن حلقه اجرا میشود — و داخل حلقه k عوض نمیشود، پس حلقه میتواند تا ابد بچرخد. در هر دو دمو گام را داخل آکولاد نگه دارید.
while نه for است و نه switch. for شروع و آزمون و گام را در یک خط سر جمع میکند. while فقط آزمون را در سرِ خودش نگه میدارد و جای شروع و گام را خودتان میگذارید. switch یکبار میان برچسبهای case انتخاب میکند. حلقهٔ for صفحهٔ Beat یا switch صفحهٔ Dial را داخل همان main نگه ندارید و بعد تعجب نکنید چرا صفحه سرِ for باقیمانده یا کلمهٔ mid نشان میدهد. main این جلسه فقط int و while را نگه میدارد.
اشتباه رایج این است که خودِ نحو را چاپ کنید: System.out.println("while (k <= 3)");. آن خط نویسههای سرِ while را مینویسد و تکرار نمیکند. اشتباه دیگر گذاشتن گیومه دور k است: System.out.println("k"); در هر دور حرف k را مینویسد. وقتی میخواهید شمارنده روی صفحه باشد، println(k) را بدون گیومه نگه دارید. اگر وقتی while برای اولین بار میرسد آزمون از قبل false باشد — مثلاً k از ۵ شروع شود و آزمون بگوید k <= 3 — بدنه اصلاً اجرا نمیشود و صفحه خالی میماند. آن هم while درست است؛ دموهای این درس آزمونی نگه میدارند که حداقل یکبار true باشد تا خطهای چاپ را ببینید.
حالا چه کار میتوانید بکنید
میتوانید شمارنده را بالای while شروع کنید، آزمون را داخل while (…) بگذارید، و هم println و هم گام را داخل آکولاد نگه دارید. عوض کردن آزمون تعداد خطها را عوض میکند. صفحهٔ بعد break و continue است؛ آنجا زود از حلقه بیرون میآیید یا یک دور را رد میکنید بدون اینکه کل حلقه تمام شود.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود