for-each در Java
سه عدد صحیح را در آرایهای به نام slots نگه دارید: ۲، بعد ۴، بعد ۶. بنویسید for (int n : slots) و داخل آکولاد n را چاپ کنید. صفحه باید سه خط نشان دهد: ۲، بعد ۴، بعد ۶. روی این صفحه شمارندهٔ ایندکس نمینویسید. هر دور مقدار بعدی آرایه را به نام n میدهد. همین پیمایش کار این صفحه است.
یک نام برای هر مقدار داخل آرایه
یک برنامهٔ کوچک با نام Pack.java بسازید. public class روی خط اول باید با نام فایل یکی باشد: public class Pack. نام کلاس قدیمی Skip یا Pulse را در این فایل نگه ندارید؛ کامپایلر انتظار دارد نام کلاس و نام فایل جور باشند.
داخل main، اول آرایه را نگه دارید:
int[] slots = {2, 4, 6};
این خط چیزی چاپ نمیکند؛ فقط سه عدد صحیح را زیر نام slots نگه میدارد. بعد حلقهٔ for-each:
for (int n : slots) {
System.out.println(n);
}
کلمهٔ for هنوز با حرف کوچک است. داخل پرانتز سه تکه با دونقطه در میان مینشینند: نوع int، نام n برای یک عنصر، بعد دونقطه، بعد نام آرایه slots. آن دونقطه برچسب case نیست و جداکنندهٔ مسیر هم نیست. یعنی «هر مقدار از slots داخل n میرود.» آکولاد بدنه را نگه میدارد. System.out.println(n); مقدار فعلی را بدون گیومه دور n مینویسد. قبل از کامپایل فایل را ذخیره کنید.
برنامهای که ۲ بعد ۴ بعد ۶ چاپ میکند
این همان نسخهای است که اول کامپایل میکنید.
public class Pack {
public static void main(String[] args) {
int[] slots = {2, 4, 6};
for (int n : slots) {
System.out.println(n);
}
}
}
در پوشهای که Pack.java آنجاست بنویسید javac Pack.java. وقتی پرانتز و آکولاد و دونقطهها جور باشند، javac خودش خطی نمینویسد. بعد بنویسید java Pack — نه java Pack.java. پسوند .java را از فرمان دوم بردارید. همین دو فرمان در Windows و macOS یکی است؛ این صفحه املای پوستهٔ جدا برای هیچکدام نمیخواهد. برنامه باید سه خط چاپ کند و تمام شود: ۲، بعد ۴، بعد ۶. منتظر تایپ شما نمیماند. اگر ترمینال منتظر ماند، هنوز nextLine از تمرین قدیمی داخل فایل است. آن را پاک کنید و آرایه بههمراه for-each بالا را نگه دارید. برای خط اشتباه روی صفحه لازم نیست JDK را دوباره نصب کنید.
یک اجرای کامل را به ترتیب بخوانید. slots مقدارهای ۲، بعد ۴، بعد ۶ را دارد. دور اول n را ۲ میکند و println عدد ۲ را مینویسد. دور دوم n را ۴ میکند و ۴ را مینویسد. دور سوم n را ۶ میکند و ۶ را مینویسد. بعد مقدار دیگری نیست و حلقه تمام میشود. روی این صفحه int i = 0 یا i < slots.length ننوشتید. سرِ for-each از Java میخواهد هر مقدار ذخیرهشده را یکبار ببیند. نام n فقط به این معنا در هر دور تازه است که عنصر بعدی را نگه میدارد؛ هنوز یکبار در سرِ حلقه بهصورت int n اعلام میشود.
آرایهٔ String را همینطور بپیمایید
آرایه و نوع عنصر را عوض کنید تا هر مقدار یک کلمهٔ کوتاه باشد:
String[] tags = {"red", "blue"};
for (String t : tags) {
System.out.println(t);
}
حالا صفحه باید دو خط نشان دهد: red، بعد blue. دونقطه هنوز بین نوع عنصر و نام آرایه مینشیند. بدنه هنوز نامی را چاپ میکند که یک عنصر را نگه میدارد.
public class Pack {
public static void main(String[] args) {
String[] tags = {"red", "blue"};
for (String t : tags) {
System.out.println(t);
}
}
}
دوباره کامپایل و اجرا کنید: javac Pack.java و بعد java Pack. باید دو خط ببینید. آرایهٔ int را با آرایهٔ String عوض کردید و نوع نام عنصر را با String جور کردید. وقتی red و blue را دیدید، میتوانید دموی int را برگردانید. هر دو نسخه Java درستاند. همان شکل for-each را با نوع عنصر متفاوت نشان میدهند.
اجرای String را یکبار دیگر بخوانید. tags مقدارهای red، بعد blue را دارد. دور اول t را red میکند و چاپ میکند. دور دوم t را blue میکند و چاپ میکند. بعد حلقه تمام میشود. گیومه در لفظ آرایه متن ذخیرهشده را علامت میزند. println(t) بدون گیومهٔ اضافه دور t همان حروف ذخیرهشده را به صفحه مینویسد.
چند قاعده که for-each را روشن نگه میدارد
پرانتز باید به ترتیب نوع، نام، دونقطه و نام آرایه را نگه دارد. نوشتن for (int n slots) بدون دونقطه را javac قبول نمیکند. نوع عنصر باید با آرایه جور باشد: int با آرایهٔ int، String با آرایهٔ String. گذاشتن int n کنار String[] شکل این درس نیست. وقتی بدنه یک خط یا بیشتر دارد، آکولاد همچنان بدنه را نگه میدارد.
for-each همان for شمارشی صفحهٔ Beat نیست و break صفحهٔ Skip هم نیست. for شمارشی شروع و آزمون و گام را با شمارنده مینوشت. for-each مقدارهایی را میپیماید که از قبل در آرایه ذخیره شدهاند. break حلقه را زود تمام میکند؛ دموی اول این صفحه همهٔ مقدارها را چاپ میکند. دموی break صفحهٔ Skip یا while صفحهٔ Pulse را داخل همان main نگه ندارید و بعد تعجب نکنید چرا صفحه ۱ و ۲ نشان میدهد نه ۲ و ۴ و ۶. main این جلسه فقط آرایه و for-each را نگه میدارد.
اشتباه رایج این است که خودِ نحو را چاپ کنید: System.out.println("for (int n : slots)");. آن خط نویسههای سرِ حلقه را مینویسد و آرایه را نمیپیماید. اشتباه دیگر System.out.println("n"); با گیومه است که در هر دور حرف n را چاپ میکند نه ۲ و ۴ و ۶ را. وقتی میخواهید مقدار عنصر روی صفحه باشد، println(n) را بدون گیومه نگه دارید.
اگر آرایه عنصری نداشته باشد — مثلاً int[] slots = {}; — بدنه اصلاً اجرا نمیشود و صفحه خالی میماند. آن هم for-each درست است؛ دموهای این درس حداقل دو مقدار نگه میدارند تا خطهای چاپ دیده شوند. وقتی بعداً به شمارهٔ ایندکس روی صفحه نیاز دارید، for شمارشی برمیگردد؛ for-each برای دیدن مقدارهاست بدون اینکه خودتان آن ایندکس را مدیریت کنید. عوض کردن مقدار داخل حلقه با n = 9; روی شکل مبتدی این صفحه خانهٔ آرایه را بازنویسی نمیکند — n را مقداری بدانید که برای چاپ میخوانید، نه ابزاری برای ویرایش slots.
حالا چه کار میتوانید بکنید
میتوانید یک آرایه بسازید، for (Type name : arrayName) بنویسید، و هر مقدار را یکبار چاپ کنید. جور بودن نوع عنصر با آرایه حلقه را کامپایلپذیر نگه میدارد. صفحهٔ بعد methods است؛ آنجا خطها را زیر نامی جمع میکنید که از main صدا زده میشود.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود