עבור לתוכן

PANEL וTHREAD

Featured Replies

פורסם
  • מחבר

א. איך עובדים עם הדיבגר שורה שורה? (אף פעם לא ניסיתי..)

ב. מה עושה הפונקציה


public int hashCode() {
return hour*100 + minute;
}

  • תגובות 54
  • צפיות 6.9k
  • נוצר
  • תגובה אחרונה

משתתפים בולטים בדיון

פורסם

א. שימי breakpoint איפה שאת רוצה בקוד (כפתור ימני בקוד ו add breakpoint או משהו כזה). תריצי את הקוד במצב debug (החיפושית במקום החץ הירוק). כאשר הוא יגיע לנקודת ה breakpoint הוא יבקש להיכנס למבט דיבג, תסכימי. אז יהיה לך למעלה חצים של step into ו step out ו step over שמאפשרים לך לשלוט באיך להמשיך לרוץ. (במבט דיבאג יש גם כלים כמו לעקוב אחרי משתנים וכו').

ב. הפונקציה הזו קשורה למיפוי של אובייקטים תחת מבנים ב Java מסוג Hash (ערבול, נושא שאולי את מכירה). זה קשור לקונבנציה שאובייקטים ב Java שמחזירים true תחת equals חייבים ש hashCode יתן ערך מיפוי (המספר שהו מחזיר) זהה. יש מצב שבקוד שלך (אם את לא משתמשת במבני ערבול) לא תהיה אף בעיה, אבל בגלל ששינינו את equals מומלץ לשנות גם את זה.

פורסם
  • מחבר

תודה אבל זה לא עובד.

הפונקציה GETTOALRM מחזירה טיפוס בוליאני וזה לא מסתדר...

פורסם

מה לא עובד ? ואיפה החלקים של קוד הבעייתי ?

פורסם
  • מחבר

זה כותב לי (על שינוי של הזה):


if (t.getTimeClock().equals(kivnclock.TimeToAlarm()))

כך:


The method equals (Object) in the type String is not applicable for the argument (boolean)

זוהי פונקציית TimeToAlarm (נותנת את הזמן 15 שניות אחרי השעה אליה כוון השעון כדי שאם שמתי שעון עכשיו- הוא יצלצל עוד 15 שניות)


public synchronized boolean TimeToAlarm()
{
if(timeAlarm.minute<45)
{
timeAlarm.minute = timeAlarm.minute+15;
}
else
{
timeAlarm.minute = timeAlarm.minute-45;
timeAlarm.hour = timeAlarm.hour+1;
}
if(timeClock==timeAlarm)
{
return true;
}
else
{
return false;
}
}

פורסם

התרגיל הזה זה במסגרת קורס ב JAVA בבית ספר ?

בכל מקרה, לא ראיתי את כל השורות, תשני את:

if (t.getTimeClock().equals(kivnclock.TimeToAlarm()))

ל

if (kivnclock.TimeToAlarm())

ובקוד של TimeToAlarm תשני את

if(timeClock==timeAlarm)

ל

if(timeClock.equals(timeAlarm))

פורסם
  • מחבר

הגדרת השעון שלי מחולקת לשני קבצים Clock ו Time (בו מוגדרות הפונקציות)

איפה אני שמה את הפונקציה EQUAL ?? אם בקובץ CLOCKאני צריכה לעשות לה קריאה בפונק Time ואז מה הפונקציה הזו תקבל???

פורסם

את צריכה לממש את הפונקציה equal בכל מקום שאת לא רוצה שהיא תתנהג כמו == . הנה דוגמא שכתבתי ואולי תעזור להבין את ההבל בין השוואת מיקום אובייקט למצב אובייקט:


public class atest
{
int an_field;

public boolean equals(Object other)
{
if (this == other) return true;
if (!(other instanceof atest)) return false;
return (an_field == ((atest)other).an_field);
}

public static void main(String[] args)
{
atest a, b, c, d; // this are REFERENCES to objects, not objects themselves.
// a REFERNCE is a kind of pointer to an object.

a = new atest(); // a points to a new object in memory.
b = a; // b points to the same object that a points to.
c = new atest(); // c points to a new object in memory.
d = new atest();

a.an_field = 1;
c.an_field = 1;
d.an_field = 2;

if (a==b) // this is true, since both refrences point to same object/place in memory.
System.out.println("a==b");
else
System.out.println("a!=b");
if (a==c) // this is false, since each reference points to another object in memory.
System.out.println("a==c");
else
System.out.println("a!=c");
if (a==d) // this is false, since each reference points to another object in memory.
System.out.println("a==d");
else
System.out.println("a!=d");

// what did we learn ? that altough that both A and C have the same state, they aren't
// the same object in memory, and thus == returns false.
// inorder to compare 2 objects state, we need to implmement our own equals that
// modifies the default behaviour of equals is ==.

if (a.equals(b)) // this is true, since both refrences point to same object/place in memory. (which has the same state as itself)
System.out.println("a equals b");
else
System.out.println("a doesn't equal b");
if (a.equals(c)) // this is true, since each reference points to another object in memory. (but the object have the same state)
System.out.println("a equals c");
else
System.out.println("a doesn't equal c");
if (a.equals(d)) // this is false, since each reference points to another object in memory. (and their state is diffrent, one has an_field with 1 and the other with 2)
System.out.println("a equals d");
else
System.out.println("a doesn't equal d");
}
}

פורסם
  • מחבר

תודה הבנתי את הענייןשל השוואת אובייקטים.

אבל -השעון מעורר לא פועל לי. יש לי בעיה עם הפונקציה TIMETOALARM.

אני רוצה שהפונקציה תבדוק עם השעה שכיוונתי בשעון מעורר+ 15 שניות היא השעה עכשיו בשעון (ולא שתכוון עכשיו את השעון מעורר לעוד 15 שניות) ולכן- שיניתי אותה והשתמשתי במשתנה עזר, אבל- זה לא פועל בכלל? ???

מה לא טוב?


public synchronized boolean TimeToAlarm()
{
Clock ezer = new Clock(timeAlarm);

if(ezer.minute<45)
{
ezer.minute = ezer.minute+15;
}
else
{
ezer.minute = ezer.minute-45;
ezer.hour = ezer.hour+1;
}
if(timeClock.equals(ezer))
{
return true;
}
else
{
return false;
}
}



פורסם

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

פורסם
  • מחבר

הוספתי עוד משתנה של שעון מעורר כדי שאם המשתמש ירצה לכוון את השעה בשעון אפילו עד שעדיין לא הגיע זמן הצלצול של השעון.

נראה לי שהבעיה היא בתנאי if (alarm.TimeToAlarm())

איך אני בודקת אם הוא נכנס לתנאי הזה? (אין כזה דבר ADD BREAKPOINT?)

פורסם

ליד שורות הקוד בלבן, יש אזור בצד שמאל אפור כזה, תלחצי כפתור ימני עליו ויהיה לך Toggle Breakpoint לשורה הנוכחית.

פורסם
  • מחבר

ואיך אני נכנסת לתוך הפונקציה??

(מה שב++C נקרא F11)

פורסם

יש לך למעלה שם במצב דיבאג יקונים של STEP IN STEP OUT וכו'....

פורסם
  • מחבר

לקראת סיום... התגלו לי שתי בעיות:

<מצורף שוב הקובץ כי עשיתי כל מיני שינויים>

1. כשהשעון מעורר מצלצל יש השהיה של השעון -> איך אפשר שהוא ימשיך לעבוד??? (ושההודעה שהגיע הזמן תהבהב בשדה טקסט?)

2. אם אני מכוונת את השעון מעורר ועד שהגיע הזמן שלו לצלצל כיוונתי את השעון הפנימי השעה של השעון מעורר משתבשת. למה זה?

[attachment deleted by admin]

ארכיון

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

דיונים חדשים