עבור לתוכן

c#|בעיה בהגדרת המחלקה "תור"

Featured Replies

פורסם

כמו שאמרתי יש לי בעיה ביצירת המחלקה תור . את ממשק המחלקה ניתן למצוא בעמוד 238.

זה הקוד של המחלקה שעשיתי:

public class Queue<T>
{
private Node<T> first;
private Node<T> last;
public Queue()
{
this.first = null;
this.last = null;
this.first.SetNext(this.last);
}
public bool IsEmpty()
{
return (this.first == null&&this.last==null);
}
public void Insert(T x)
{
Node<T> temp = new Node<T>(x, this.last);
this.last = temp;
}
public T Remove()
{
T temp = this.first.GetInfo();
this.first = this.first.Getnext();
return temp;
}
public T Head()
{
return this.first.GetInfo();
}
public override string ToString()
{
string str = "[";
Node<T> pos = this.first;
while (pos != null)
{
str = str + pos.GetInfo().ToString();
if (pos.Getnext() != null)
str = str + ",";
pos = pos.Getnext();
}
return str;
}

כשאני מפעיל תוכנית המשתמשת במחלקה אני מקבל הודעה ש-CONSOLEAPPLICATION הפסיק לעבוד.

לפי דעתי הבעיה היא איפושהו בפעולה הבונה. כמה שניסיתי לסדר את זה לא הצלחתי. :nixweiss: :nixweiss:

תודה מראש

  • תגובות 38
  • צפיות 4.6k
  • נוצר
  • תגובה אחרונה
פורסם

קודם כל, אתה יכול להריץ את התכנית שלך step by step בשביל לראות בדיוק איפה הבעיה.

חוץ מזה, הבעיה אכן בבנאי. שים לב למה שאתה מנסה לעשות עם first.

פורסם
  • מחבר

קודם כל, אתה יכול להריץ את התכנית שלך step by step בשביל לראות בדיוק איפה הבעיה.התכוונת ל-STEP OVER? אם כן לא הבנתי איך משתמשים בזה. אם לא איך מגיעים למה שאמרת?

חוץ מזה, הבעיה אכן בבנאי. שים לב למה שאתה מנסה לעשות עם first.

אני יודע שהבעיה היא עם השורה הזאת: this.first.SetNext(this.last); אני לא כ"כ יודע מה הבעיה. יכול להיות שזה בגלל שאני מפנה לעצמים שהם NULL??

[/quote

]

תודה על העזרה!

פורסם

כן, זו בדיוק הבעיה.

בשביל להשתמש ב-step by step אתה צריך לשים breakpoint במקום שאתה רוצה שהתכנית תעצור בו (לדוגמה, בתחילת הבנאי). כשאתה מריץ את התכנית, ברגע שהיא מגיעה לשורה שבה נמצאת ה-breakpoint אז התכנית תעצור והחלון של VS יקפוץ, ואז אתה יכול להמשיך משם צעד אחר צעד באמצעות F10.

פורסם
  • מחבר

^^^ שאותה אני לא יודע איך לפתור. אני חייב להגדיר את התכונות כ-NULL כי אני אמור לבנות מחסנית ריקה. השאלה היא איך אני אמור לקשר בין התכונות FIRST וLAST??

פורסם

תחשוב מה המשמעות של null, ומה המשמעות של רשימה ריקה.

נסה לצייר בדף ועט איך נראית רשימה ריקה, רשימה עם איבר אחד, רשימה עם שני איברים ושלושה (כלומר ממש צייר "תיבות" שמייצגות כל Node, וצייר על מה מצביעים first ו-last)

פורסם
  • מחבר

null זה הפניה ריקה שלא מובילה לשום עצם. כשיש ברשימה עצם אחד last ו first מצביעים על אותו עצם (כשיש יותר אז LAST לאחרון וFIRST לראשון.)

אני לא יודע על מה הם מצביעים כשהרשימה ריקה(אם הבנתי אותך נכון אתה אומר שהם לא NULL). :nixweiss: :nixweiss:

ד"א כשמחבר הספר הגדיר את המחלקה "מחסנית" בפעולה הבונה מחסנית ריקה הוא כן הגדיר את התכונה FIRST כNULL....

דבר נוסף מה זה BREAKPOINT ואיך אני משנה את המקום שלו?

פורסם

כשיש רשימה ריקה, first ו-last לא מצביעים על אותו עצם - הם למעשה לא מצביעים על שום עצם (וככה צריך להיות - הרי הרשימה ריקה, אין בה איברים).

בן אדם, קצת תושיה. תנבור קצת בתפריטים של VS ותמצא איך מוסיפים breakpoint.

פורסם
  • מחבר

כשיש רשימה ריקה, first ו-last לא מצביעים על אותו עצם - הם למעשה לא מצביעים על שום עצם (וככה צריך להיות - הרי הרשימה ריקה, אין בה איברים).

אז לא הבנתי מה אני אמור לעשות. להגדיר אותם כ-NULL??

או לא לאתחל אותם כלל ולכתוב רק את השורה הזאת(this.first.SetNext(this.last);) בפעולה הבונה???

פורסם

אם אתה מאתחל אותם, זה אומר שהם מצביעים לעצם כלשהו. אבל ברשימה אין איברים. אז איך הם מצביעים למשהו?

תחשוב איך נראה התור כשהוא ריק, עם איבר אחד, עם שני איברים ועם שלושה (כמו שאמרתי - צייר את עצמי ה-Node על דף וצייר את המצביעים עם חיצים והכל), ואז תחשוב איך כותב קוד שיגרום להם להיראות ככה בזכרון.

פורסם
  • מחבר

אני יודע איך הוא נראה בכל המקרים חוץ מכשהוא ריק. אמרת ש"ריק" זה שום עצם אז על מה FIRST & LAST מצביעים.??

אולי פשוט תגלה לי את התשובה?? :s07: :s07:

פורסם
  • מחבר

לא יודע :nixweiss:

פורסם
  • מחבר

אז אני אמור להגדיר את התכונות FIRST ןLAST כ-NULL (כמו שעשיתי בהתחלה).

אבל איך אני אקשר בין LAST ו-FIRST???

ארכיון

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

דיונים חדשים