PDA

View Full Version : سوال: حذف عناصر ArrayList بعد از بررسی شرط



بیتا حکمت
دوشنبه 07 اردیبهشت 1394, 16:24 عصر
سلام . وقت بخیر .

یک یک شی از نوع ArrayList به صورت سراسری تعریف کردم



ArrayList Arraylisttest = new ArrayList();


با کلیک روی باتن یک 5 عنصر بهش اضافه میشن




Arraylisttest.Add("1");
Arraylisttest.Add("2");
Arraylisttest.Add("3");
Arraylisttest.Add("4");
Arraylisttest.Add("5");


و با کلیک روی باتن 2 میخوام عناصری که مقدارشون مخالف یک هست حذف بشن



for (int i = 0; i <= Arraylisttest.Count-1; i++)
{
int shart = int.Parse(Arraylisttest[i].ToString());
if (shart != 1)
Arraylisttest.RemoveAt(i);
}




مشکل اینجاست که وقتی روی باتن سوم کلیک می کنم به جای اینکه تعداد عناصر رو یک نشون بده عدد سه رو نشون می ده ؟!




private void button3_Click(object sender, EventArgs e)
{
// پس باید با فشردن این دکمه عدد یک رو ببینم
MessageBox.Show(Arraylisttest.Count.ToString());
}

malizergani
دوشنبه 07 اردیبهشت 1394, 17:28 عصر
سلام دوست عزیز

اشکال در button2_Click شما درواقع همان حلقه ست، حلقه وقتی شروع به کار می کنه مقدار تعداد گردش حلقه Arraylisttest.Count معرفی شده وقتی آیتمی از آرایه لیست حذف بشه تعداد گردش حلقه هم به طبع اون تغییر می کنه اینه که حلقه شما هیچ وقت به انتها نمیره برای اینکار باید از کد زیر استفاده کنید.

for (int i = 0; i <= Arraylisttest.Count-1; i++)
{
int shart = int.Parse(Arraylisttest[i].ToString());
if (shart != 1)
{
Arraylisttest.RemoveAt(i);
i = 0;
}
}

بعداز هر حذف آیتم از لیست حلقه شما از صفر شروع به کار می کنه با توضیحی که بالا دادم انشالله مشکلتون حل بشه.

Davidd
دوشنبه 07 اردیبهشت 1394, 17:32 عصر
سلام. ایراد از کد باتن 2 هست. وقتی دستور Arraylisttest.RemoveAt(i); اجرا میشه عنصر واقع در ایندکس i حذف میشه و بقیه عناصر بعد از i یکی به عقب شیفت داده می شن. برای مثال اگه i=2 باشه عنصر دوم حذف میشه و عنصر سوم که 3 هست در ایندکس 2 قرار میگیره. در حالی که شمارنده حلقه یکی زیاد میشه و عنصر ایندکس 2 چک نمیشه.
راه حلش اینه که وقتی دستور Arraylisttest.RemoveAt(i); اجرا شد شمارنده i زیاد نشه که با while میتونی اکدشو بنویسی.

پ.ن : جواب بالا هم درسته و من بعد از ارسال دیدم

بیتا حکمت
دوشنبه 07 اردیبهشت 1394, 17:34 عصر
سلام دوست عزیز

اشکال در button2_Click شما درواقع همان حلقه ست، حلقه وقتی شروع به کار می کنه مقدار تعداد گردش حلقه Arraylisttest.Count معرفی شده وقتی آیتمی از آرایه لیست حذف بشه تعداد گردش حلقه هم به طبع اون تغییر می کنه اینه که حلقه شما هیچ وقت به انتها نمیره برای اینکار باید از کد زیر استفاده کنید.

for (int i = 0; i <= Arraylisttest.Count-1; i++)
{
int shart = int.Parse(Arraylisttest[i].ToString());
if (shart != 1)
{
Arraylisttest.RemoveAt(i);
i = 0;
}
}

بعداز هر حذف آیتم از لیست حلقه شما از صفر شروع به کار می کنه با توضیحی که بالا دادم انشالله مشکلتون حل بشه.

ممنونم . همونطور که گفتین نوشتم حل شد.