c#|בעיה בהגדרת המחלקה "תור" - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


raiman1

Recommended Posts

כמו שאמרתי יש לי בעיה ביצירת המחלקה תור . את ממשק המחלקה ניתן למצוא בעמוד 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
  • נוצר
  • תגובה אחרונה

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

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

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

[/quote

]

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

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

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

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

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

תחשוב מה המשמעות של 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 על דף וצייר את המצביעים עם חיצים והכל), ואז תחשוב איך כותב קוד שיגרום להם להיראות ככה בזכרון.

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

ארכיון

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


×
  • צור חדש...