תכנות מתקדם ב-Java/אובייקטים/תרגילים

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי
קפיצה לניווט קפיצה לחיפוש

על מנת לפתור תרגיל זה, יש להעתיק תחילה את הקבצים Item.java ו-Stock.java כפי שהם מופיעים בפרק. במידה ואתם עובדים עם סביבת עבודה, צרו פרוייקט שיכיל את שני הקבצים האלו. במידה ואתם עובדים משורת הפקודה, דאגו שהקבצים הנוגעים לתרגיל יופיעו באותה תיקייה, וההידור יתבצע באמצעות הפקודה javac *.java

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

ממשק נוח יותר[עריכה]

המשימה הראשונה היא לבנות דרך נוחה יותר להתעסק עם המחלקות שבנינו, וזאת באמצעות בנייה מחדש של הקובץ Grocery.java, בצורה נוחה למשתמש. בתחילה, תכניס התוכנית שני מוצרים למלאי (אפשר להשתמש בקוד המתאים שכבר נמצא בתוכנית, או לכתוב אותו מחדש). שנו את הקובץ, כך שאחרי הכנסת המוצרים, תציג התוכנית תפריט (טקסטואלי) שיאפשר לבעל המכולת לבחור אם להדפיס את המלאי הנוכחי, להדפיס את הערך הכולל של המוצרים, או לצאת. התוכנית תפעל עד שהמשתמש יבחר לצאת, ולאחר ביצוע כל פעולה - תדפיס מחדש את התפריט ותבקש מהמשתמש לבחור מה ברצונו לעשות. תפריט לדוגמה:

What do you want to do now?
1. Print stock
2. Calculate total stock value
3. Quit
Enter your choice:

כאשר המשתמש בוחר מספר בין 1 ל-3. ניתן כמובן, לעשות זאת בכל דרך שהיא, כל עוד היא נוחה למשתמש. דאגו לטפל במצב בו משתמש לא עירני מכניס אפשרות לא הגיונית (למשל - מכניס 4, למרות שאין אפשרות כזו). כדי ליצור תוכנית אלגנטית ונוחה לשינוי, השתמשו בקבועים (תזכורת: קבועים מוגדרים באמצעות המילה השמורה final).

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


חיפוש של מוצר[עריכה]

בשלב זה ננסה לשפר את המחלקה Stock. הוסיפו למחלקה שיטה בשם Contains, המקבלת מחרוזת, ומחזירה "אמת" אם מוצר בשם זה קיים במלאי, ו"שקר", אם לא. כותרת השיטה היא

public boolean Contains(String item)

דאגו לטפל גם במצב בו אין במלאי אף מוצר, או שיש בו רק מוצר אחד, כך שהתוכנית לא תתמוטט בשום מצב. הוסיפו לתפריט אפשרות לבדוק אם מוצר קיים במלאי או לא. אם יכניס המשתמש אפשרות זו, הוא יתבקש לכתוב את שם המוצר שצריך לחפש, והתוכנית תדפיס אם המוצר נמצא במלאי או לא. רמז: כדי לבדוק אם שתי מחרוזות זהות, עדיף להשתמש בשיטה equals ולא בהשוואה רגילה. כלומר - if(str.equals(str2)) ולא if(str == str2).