שאלה בJAVA..

שאלה בJAVA..

בשאלה זו תממשו אפליקציה שמנהלת מידע על דיסקים וסרטים. הרעיון הוא ליצור קטלוג של כל ה- CD וה- DVD שיש לאדם (או שהוא שמע או ראה בחייו). שימו לב, המטלה נועדה לתרגל את נושאי הירושה והפולימורפיזם. הפונקציונליות שאנו רוצים שתהיה בפרויקט זה היא כזו: • צריכה לאפשר לנו להכניס מידע על CDs ו- DVDs • צריכה לשמור את המידע באופן קבוע כך שאפשר יהיה להשתמש בזה אח"כ. • צריכה לספק לנו פונקצית חיפוש שמאפשרת לנו למצוא, למשל, את כל ה- CDs שבאוסף של אמן מסוים או את כל ה- DVDs של במאי מסוים. • צריכה לאפשר לנו להדפיס את רשימת כל ה- DVDs שבאוסף או את רשימת כל ה- CDs שבאוסף. • צריכה לאפשר לנו למחוק מידע מהאוסף. סעיף א. המידע שאנו רוצים לאחסן על כל CD הוא: • כותרת האלבום; • שם האמן או הלהקה; • מספר המסלולים שיש ב- CD; • אורך הדיסק כולו; • ציון אם יש לי את ה-CD הזה או לא; • הערה על הדיסק. המידע שאנו רוצים לאחסן על כל DVD הוא: (לשם פשטות נניח כי כל DVD מאחסן סרט קולנוע ולא משהו אחר). • כותרת ה-DVD; • שם הבמאי; • אורך הסרט כולו; • ציון אם יש לי את ה-DVD הזה או לא; • הערה על הסרט. התכונות כותרת, שם (אמן או במאי), אורך כולל ומספר המסלולים (ב- CD) יהיו immutable, כלומר אי אפשר לשנות אותן. לכן, הבנאים של CD ושל DVD יקבלו פרמטרים עם התכונות האלו. כמו כן, תכונת הבעלות תקבל false וההערה תקבל מחרוזת ריקה בבנאי. את התכונות לגבי הבעלות על הפריט וההערה אפשר לשנות. (אילו שיטות צריכות להיות?) שיטה נוספת שצריכה להיות לכל מחלקה היא toString המחזירה את כל הפרטים על הפריט בצורת מחרוזת. עליכם לכתוב מחלקות מתאימות, CD, DVD, Item (עם ירושה) שיממשו את האמור לעיל (תכונות, בנאים ושיטות). חישבו היטב אילו תכונות ואילו שיטות יהיו בכל מחלקה. סעיף ב. בסעיף זה עליכם לכתוב מחלקה בשם DataBase. המחלקה תחזיק מערך של Item. • גודלו המקסימלי של המערך יהיה 30. ואיך נדע את מספר הפריטים בפועל? חישבו היטב איך לממש זאת. • השיטות במחלקה זו יהיו: o public void addItem (Item newItem) - המכניסה פריט חדש לאוסף. o public void removeItem (Item item) - המוחקת פריט מסוים מהאוסף. o public String toString () - המחזירה מחרוזת המייצגת את האוסף כולו כאשר לאחר כל פריט יש שתי שורות רווח. o public void printCDs () - המדפיסה את כותרות כל ה- CDs שיש באוסף. o public void printDVDs () - המדפיסה את כותרות כל ה- DVDs שיש באוסף. o public int howManyArtist (String artist) - המחזירה את מספר ה- CDs שיש לאמן מסוים artist. הצלחתי לכתוב הכל אבל יש לי בעיה קטנה והיא שיטתת ה- ADDITEM של DATABASE אשמח אם מישהו יוכל לעזור לי כי אני תקוע איתה וזה כל מה שנשאר לי...תודה מראש
 

1ca1

New member
היא abstract function

היא ממומשת בילדים שיורשים אותה...
 

1ca1

New member
האמתי במבנה שלך היא לא

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

זאת השיטה שלי: public void addItem(ITEM newItem) { if(num == 0 && array[0] == null) { if(newItem instanceof DVD){ array[0] = (DVD) newItem; num++; } if(newItem instanceof CD){ array[0] = (CD) newItem; num++; } } for(int i=0; i<num; i++) { if (array instanceof CD ){ CD cd = (CD) array; newItem = (CD) newItem; for(int k=1; k< num; k++) { int place = (num-1)-k; array[k+1] = array[k]; num++;} } if (array instanceof DVD){{ DVD dvd = (DVD) array; newItem = (DVD) newItem; if(dvd.getName() != newItem.getName() && dvd.getAuthor() != newItem.getAuthor() && dvd.getLength() != newItem.getLength() && num != array.length){ for(int k=0; k< num; k++) { int place = (num-1)-k; array[k+1] = array[k];} num++; } } } } } זה נראה לי מסובך מדי.. אבקש תגובות
 

1ca1

New member
מה אתה בדיוק עושה?

גם תכתוב בצורה ברורה אם אתה רוצה עזרה, כל אופן, אם size כבר שווה 30, תזרוק אקספשן, אחרת תפנה לarray במקום הsize ותוסיף לו את newItem. מאחר שarray הוא מערך של Item, וCD/DVD הם בנים של Item, הוא יכול להחזיק אובייקטים שלהם, וזהו.
 
אתה יכול בבקשה לכתוב את כל הקוד מחדש כך שאני

יבין ויתקן? כי אני לא מבין מה אתה מתכוון...
 

HaifaMan

New member
אז תגיד מההתחלה שאתה מחפש פתרון שלם :)

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

לכל המקרים.. אשמח אם מישהו יוכל לתת לי שיטה אחרת דומה... כך שהיא תעבוד בכל המקרים
 

HaifaMan

New member
קח אלגוריתם מאוד פשוט להוספה:

1. עבור תא תא במערך ובדוק אם האיבר שרוצים להכניס קיים כבר. 2. אם כן - עצור. 3. הכנס את האיבר בתא הפנוי הבא במערך (אם אין - כתוב הודעה מתאימה וצא).
 

HaifaMan

New member
תנסה אתה...

אתה יודע איך לעבור על מערך עם לולאת for ולבדוק שוויון? (כדאי לממש את מתודת equals עבור האובייקט שלך) זה אולי הקושי היחיד (וגם זה לא ממש קושי) במתודה הזו. כל השאר טריוויאלי.
 
אתה לא יכול לעזור לי? בבקשה רק תכתוב לי את

השיטה ונגמור עניין אני נורא מבקש.. תעשה לי טובה זה להגשה היום!!!! אם אתה תוכל לכתוב לי אני אפילו אשלם לך כסף... רק תפתור לי את זה היום וכמה שיותר מהר
 

HaifaMan

New member
כסף... now you're talking../images/Emo6.gif

הפורום הזה מיועד לעזרה בהבנה, לא למכירת עבודות. המתודה הזו מאוד מאוד פשוטה, כמה שורות של קוד. במקום לבזבז מאמץ לשכנע אותי - שב לכתוב קוד, תאמין לי שבמאמץ מינימלי תצליח.
 

vinney

Well-known member
שמע...

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

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

וגם כתבתי את הבעיה שלי ואף אחד לא מוכן לעזור לי לתקן אותו!!! אני לא צריך אלגורתמים אני צריך רק דבר אחד וזה הקוד מתוקן!!!!!!!!!!!!!!
 

HaifaMan

New member
רוצה לדעת מה הבעיה בקוד שלך? בבקשה

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