שאלה על שימוש ב-Class, ArrayList ומתודות ב-C# בתרגיל ספציפי - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שאלה על שימוש ב-Class, ArrayList ומתודות ב-C# בתרגיל ספציפי


DrizziTx

Recommended Posts

אז ככה, מטרת התוכנית לקלוט נתון של ID,שם,משכורת ועיר לפי class שבניתי, וןאז מכניס אותו לתוך arraylist. יש כפתור שמציג את כול המידע באמצעות foreach והבעיה נעוצה בכפתור פילטר שאמור לסנן ולהראות תוצאות לפי מה שהוכנס בשדה פילטר.

הכל עובד נהדר פרט למתי שאני משתמש במתודה בתוך ה-class שנועדה להגיד האם מצאתי התאמה בין מה שהקשתי בתיבה של הפילטר לבין מה שקיים ב-arraylist. אני אתן את קטעי הקוד ואסביר עוד קצת

private void button1_Click(object sender, EventArgs e)
{
Employee newEmp = new Employee();
newEmp.id = Int32.Parse(IDBox.Text);
newEmp.name = EmployeeNameBox.Text;
newEmp.salary=Int32.Parse(SalaryBox.Text);
newEmp.city = CityNameBox.Text;
employee.Add(newEmp);
IDBox.Text = "";
EmployeeNameBox.Text = "";
SalaryBox.Text = "";
CityNameBox.Text = "";

}

כאמור כאן מתרחשת קליטת הנתונים והכנסה ל-arraylist

if (CityFilterBox.Text != "")
{
foreach (Employee item in employee)
{
if (filterEmp.IsExist((Int32.Parse(SalaryFilterBox.Text)), CityFilterBox.Text))
{
showBox.Text += string.Format("{0} {1} {2} {3} {4}", item.id, item.name, item.city, item.salary, Environment.NewLine);
}
}
}

הנה חלק מהפילטר שבניתי, אם חוזר true מהמתודה אז צריך להדפיס את הנתונים של אותו אדם

class Employee
{
public string name;
public int id;
public int salary;
public string city;
public Boolean IsExist(int Salary)
{
if (salary == Salary)
{
return true;
}
else
{
return false;
}
}

זה ה-class שיושב בדף נפרד(.cs) ובתוכו המתודה. עשיתי debug וראיתי שה-salary תמיד אפס, ה-Salary שאני שולח מה-form עצמו בסדר גמור. למעשה כל הנתונים של ה-class הם תמיד אפס או null בהתאם לברירת המחדל של int או string וזו הבעיה שלי, למה?

מקווה שזה מספיק ברור,

תודה מראש לעוזרים :silly:

קישור לתוכן
שתף באתרים אחרים

מה זה filterEmp? איפה הגדרת אותו? אתה קורא לפונקציה בשם IsExist שמקבלת שני ארגומנטים, אבל הפונקציה שהגדרת ב-Employee מקבלת רק ארגומנט אחד.

ב-if אתה בכלל לא מתייחס ל-item, זה אמור להיות ככה?

קישור לתוכן
שתף באתרים אחרים

בניסיון לא לכתוב יותר מדי כדי לא להעמיס לא רשמתי את הדברים הללו, נתתי רק דוגמא למה שלא עובד.

בכל אופן את ה-filterEmp אני יוצר בעת לחיצה על כפתור הפילטר, הדוגמה של הפילטר היא לא טובה, הייתי בטוח שנתתי את הקטע ששולח רק משתנה אחד למתודה, הנה הקטע הרלוונטי עם משתנה אחד (יש overloading אבל כיוון שהבעיה לא שם לא ציינתי את זה):

foreach (Employee item in employee)
{
if (filterEmp.IsExist((Int32.Parse(SalaryFilterBox.Text))))
{
showBox.Text += string.Format("{0} {1} {2} {3} {4}", item.id, item.name, item.city, item.salary, Environment.NewLine);
}
}

בנוגע לשימוש ב-item, אין לי מושג, למה אתה מתכוון?

קישור לתוכן
שתף באתרים אחרים

שניצל התשובה הראשונה שלך זרקה אותי בכיוון, תודה!!! :xyxthumbs:

ובכן מה שקורה הוא שיצרתי מופע חדש והשתמשתי בו במקום להתייחס ל-item כמו ששאלת, לא יודע למה הייתי כל כך טיפש, אמרתי לעצמי שאני לא מבין איך התוכנה יודעת מה התוכן של ה-arraylist אם אני מתשמש במופע חדש. בכל מקרה ברגע ששיניתי את filterEmp ל-item (אני די בטוח שניסיתי קודם ולא עבד) אז הכל הסתדר והפילטר עובד כמו שצריך.

בנוגע לדיבגר, השתמשתי בו וככה ראיתי שהערכים הם null ו-0.

תודה רבה על התגובה הסופר מהירה, תודה גם לך Shmel.

עכשיו אני יכול להמשיך לתרגיל בירושה :silly:

קישור לתוכן
שתף באתרים אחרים

generic list עוד לא למדנו וכרגע משתמשים ב-arraylist, המורה אכן ציין שמדובר במערך ישן ומוגבל אבל ראיתי כבר שהוא מקצוען אמיתי ואני סומך על דרך הלימוד שלו

בנוגע לשינוי של ה-if, לפחות בינתיים אני מעדיף לכתוב בדרך המלאה, להתרגל לסינטקס ברור, כעיקרון מניסיון עבר אני יודע שזה מוכיח את עצמו כשהקוד עובר בין הרבה אנשים, עם הזמן אני אראה האם דרך הקיצורים שווה או שעדיף להישאר by the book

שאלה אחרת שעולה בדעתי בהקשר ל-IF, איך הוא יודע מה להחזיר? האם בעצם העובדה שהגדרתי בוליאן כמשתנה שחוזר, ה-C# יודע להחזיר true או false מעצם פעולת ההשוואה?

קישור לתוכן
שתף באתרים אחרים

ההשוואה היא ביטוי לוגי שיש לו שני תוצאות True False .

כשאתה מחזיר את הביטוי הלוגי אתה בעצם מחזיר את התוצאה שלו.

דרך אגב ArrayList זה באמת מבנה נתונים ישן ולא יעיל.

הסיבה לכך היא שהוא מחזיק עצמים מטיפוס object וכשאתה שולף מתוכו נתונים אתה צריך לבצע המרה לטיפוס הרצוי וזה מיותר ומוריד את הביצועים.

קישור לתוכן
שתף באתרים אחרים

אופרטור ההשוואה == הוא אופרטור לכל דבר, כמו חיבור וחיסור. הוא בעצם שקול לפונקציה שערך ההחזרה שלה הוא Boolean. ביטוי if חייב לקבל ערך בוליאני (הוא גם יכול להיות סתם משתנה מטיפוס Boolean).

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...