עבור לתוכן

שאלה בJAVA : תכנות מונחה עצמים.

Featured Replies

פורסם

שלום לכולם קודם כל ! אני חדש באתר, תלמיד יב' בתיכון שוהם, לומד JAVA במגמת מחשבים 5 יח"ל.

יש לי בעיה קטנה, מקווה שתעזרו לי :)

ממש בJAVA את המחלקה הבאה :

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

public static double calculateDiscPrice(Disc[] a)

עוד קצת פרטים :

עצם ראשון - Singer. תכונות :

firstName

lastName

age

gender

עצם שני - Disc. תכונות :

discName

Singer (העצם הראשון)

numOfSongs

price

style

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

if(_________.compareTo("shlomi")==1)
price = price + a.price;

כמובן שזה בתוך לולאה ואחרי שהצהרתי על price, אבל איך אני מגיע לתכונה שנמצאת בתוך עצם שמתפקד כתכונה בעצם אחר ?

להגיע לfirstName של Singer מתוך a שהוא מערך של דיסקים (Disc).

תודה רבה על העזרה :)

פורסם

אתה מתכוון לזה?


if(discObj.singerObj.firstName.compareTo("shlomi")==1)
price = price + discObj.singerObj.price;

כש discObj זה השם של אובייקט הדיסק (כנראה a) ו singerObj זה השם שקבוע ל Singer בתוך Disc ואותו דבר על firstName

פורסם

תוודא שהאובייקט הפנימי שאליו אתה מנסה להגיע מוגדר כ- Public.

פורסם
  • מחבר

האובייקט שאליו אני מנסה להגיע לא חייב להיות public, הוא מוצהר כprivate וזה בסדר.

בכיתה המורה נתן משהו שצריך לכתוב אחרי a. כדי להוציא את העצם Singer משם ואז לרשום .fName

if(a[i].Singer.fname.compareTo("שלומי")==1)

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

תודה על העזרה בכל מקרה, עוד מישהו יכול לנסות ?

פורסם

כי Singer הוא שם של class, אתה צריך לתת את השם של האובייקט בתוך Disc מסוג Singer.

פורסם
  • מחבר

כי Singer הוא שם של class, אתה צריך לתת את השם של האובייקט בתוך Disc מסוג Singer.

השם של העצם Singer, הוא singer..

שיניתי את האות הגדולה לאות קטנה וזה החליף לי את הטעות מsinger ל-fname שאחריו.

=\

פורסם

מה השגיאה בכלל?

בכל מקרה, לא הבנתי איך יכול להיות ש private זה בסדר, אלא אם אתה עובד עם מתודות שמחזירות ומשנות את המשתנה.

פורסם

אם fname הוא משתנה פרטי של Singer לא תוכל לגשת אליו סתם ככה.

פורסם
  • מחבר

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

אני אשאל את המורה שלי ואחזור לעדכן אותכם שתלמדו משהו חדש גם אתם ;)

פורסם

אתה יכול או להגדיר אותו המשתנה public ואז תוכל לגשת אליו ישירות, או לחלופין לעשות 2 פונקציות public הידועות כ getter ו setter ולהשתמש בהן.

פורסם
  • מחבר

לא .. לצערי זו גם לא השיטה הזו =\

והמורה שלי לא רוצה להביא לי את הפונקציה שאני מחפש כי הוא אומר שאני לא מקשיב בשיעור אז מגיע לי חחח ..

פורסם

אם ה singer בתוך DISKהוא private אתה לא יכל לגשת אליו מתוך ה main.

אם אתה לא רוצה/יכל לעשות SETTER ו/או GETTER , תבנה מטודה שמשווה בין שני אובייקטים לפי ה singer=> תעמיס את המטודה compareTo של דיסק שתשווה בין שני דסקים, הם שווים אם יש להם את אותו סינגר ( לפי ערך, לא לפי רפרנס). תצטרך גם בנאי שיבנה אובייקט של DISK כשהוא מקבל מחרוזת של שם SINGER.

פתרון עקום, אבל זה מה יש.

פורסם
  • מחבר

חחחח תאמת שלא הבנתי הרבה ממה שרשמת .. אין לי מושג מה זה getter \ setter, מטודה, רפרנס, בנאי .. הרבה ביטויים שאנחנו לא משתמשים בהם עדיין ..

אני מנסה לברר איך המורה שלי עשה את זה בכיתה ואני אחזור אליכם, תודה רבה בכל מקרה :)

פורסם

תנסה לרשום פה את הקוד( או לפחות את החלקים הרלוונטים -> הגדרות של הקלאס SINGER ו DISK ), שיהיה לאנשים קל יותר להבין מה בדיוק אתה מנסה לעשות ואיפה הטעות.

פורסם

זאת הפונקציה, בדקתי והיא עובדת

public static double calculateDiscPrice(Disc[] a)

{

float totalPrice = 0.0f;

for(int i = 0; i < a.length;i++)

{

if(a.getSinger().getFirstName().compareTo("shlomi") == 0)

{

totalPrice += a.getPrice();

}

}

return totalPrice;

}

צירפתי קובץ עם התוכנית המלאה

[attachment deleted by admin]

ארכיון

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

דיונים חדשים