PANEL וTHREAD - עמוד 3 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

PANEL וTHREAD


ה*לה

Recommended Posts

  • תגובות 54
  • נוצר
  • תגובה אחרונה

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

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

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

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

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

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


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?)

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

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

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

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

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

[attachment deleted by admin]

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

ארכיון

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


×
  • צור חדש...