PDA

View Full Version : آموزش: پیمایش آرایه دوبعدی



sajjad4563
سه شنبه 15 مهر 1393, 00:16 صبح
با سلام

من آرایه دوبعدی 3*3 دارم که از دوحلقه for برای پیمایش آرایه استفاده کردم

پیمایش آرایه من از پایین ترین سطر آرایه و سمت چپ ترین قسمت شروع به پیمایش میکنه و بصورت عمودی به سمت بالا میره

حالا میخوام هر وقت سطرهای من تموم شد (یعنی به بالاترین سطر رسید) من متوجه بشم و از همه حلقه ها بیام بیرون.

من این کد رو نوشتم، ولی نمیدونم چرا زمان پایان یافتن سطر ها (حلقه داخلی) رو نمیتونه تشخیص بده!

(قسمتی از کد)

boolean rowsFinished = false;

while ( rowsFinished == false) {
for (int cols = 0; cols < 3; cols++) { // cols: 0,1,2
for (int rows = 2; rows >= 0; rows--) { // rows: 2,1,0
//do something with each 2D array elements
}
rowsFinished = true;
System.out.println("rowsFinished is: " + rowsFinished);
}
}


اصلا عبارت " rowsFinished is " نشون داده نمیشه

هدف من از تشخیص پایان یافتن سطر ها (رسیدن به بالاترین سطر) اینه که کاملا از هر دو حلقه بیام بیرون و پیمایش رو متوقف کنم.

به خاطر عملیات کار با هر عنصر آرایه، به هر دو حلقه for نیاز دارم.

محمد فدوی
سه شنبه 15 مهر 1393, 00:35 صبح
سلام. شما وقتی بلوک for اول رو داخل بلوک while نوشتین، یعنی تا وقتی همه‌ی دفعات for به طور کامل طی نشن دوباره حلقه while چک نمیشه. لزومی به استفاده از while در این مثال نیست. شما میتونی با اضافه کردن Label به یک حلقه مشخص کنی که هدف دستور break/continue کدوم حلقه‌ست. خلاصه میتونی کدت رو اینجوری اصلاح کنی:

outer:
for (int cols = 0; cols < 3; cols++) { // cols: 0,1,2
for (int rows = 2; rows >= 0; rows--) { // rows: 2,1,0
// do something with each 2D array elements
}

break outer;
}
System.out.println("Items are finished.");



هرچند حلقه‌ی بیرونی فقط یه‌بار اجرا می‌شه و نیازی به اون‌هم نیست:


for (int cols = 0, rows = 2; rows >= 0; rows--) { // rows: 2,1,0
// do something with each 2D array elements
}

System.out.println("Items are finished.");


اینجا هم برچسب‌های خیلی کاملی برای موضوعات ایجاد شده نداره ولی پیشنهاد می‌کنم برای سؤالاتتون از برچسب سؤال استفاده کنین، نه آموزش.
موفق باشین.