המשימה
נתונה המחלקה Book עם שתי תכונות פרטיות: כותרת ושנה. השלם אותה כך שתכלול: • בנאי רגיל שמקבל כותרת ושנה. • **בנאי העתקה** — בנאי שמקבל ספר קיים ובונה ממנו ספר חדש עם אותם ערכים. • פעולת setYear שמשנה את השנה. • פעולה sameAs שמקבלת ספר אחר ומחזירה true אם שני הספרים בעלי אותה כותרת ואותה שנה. הנחיות: • השוואת מחרוזות נעשית ב-equals ולא ב-== . השוואה ב-== משווה הפניות, ולכן היא עלולה להחזיר false על שתי מחרוזות זהות. • זו בדיוק הנקודה של התרגיל: `Book b = a;` אינו העתקה — שני השמות מצביעים על אותו עצם, ושינוי דרך אחד נראה גם דרך השני. בנאי העתקה יוצר עצם **חדש**, ולכן שינוי בו אינו משפיע על המקור. • sameAs משווה ערכים, לא הפניות. שני עצמים נפרדים עם אותם ערכים — התשובה true. [טבלה]
קוד הפתיחה
class Book {
private String title;
private int year;
public Book(String title, int year) {
// אתחל את התכונות
}
/** בנאי העתקה — בונה ספר חדש עם אותם ערכים כמו other. */
public Book(Book other) {
// כתוב את הפתרון כאן
}
public String getTitle() {
return "";
}
public int getYear() {
return 0;
}
public void setYear(int year) {
// עדכן את השנה
}
/** האם שני הספרים בעלי אותה כותרת ואותה שנה. */
public boolean sameAs(Book other) {
// כתוב את הפתרון כאן
return false;
}
}
public class Main {
public static void main(String[] args) {
Book a = new Book("Dune", 1965);
Book copy = new Book(a);
System.out.println(a.sameAs(copy)); // true
copy.setYear(2000);
System.out.println(a.getYear()); // 1965 — המקור לא נפגע
System.out.println(copy.getYear()); // 2000
System.out.println(a.sameAs(copy)); // false
Book ref = a; // לא העתקה — אותו עצם
ref.setYear(1999);
System.out.println(a.getYear()); // 1999
Book x = new Book("Dune", 1999);
System.out.println(a.sameAs(x)); // true — ערכים זהים
}
}
כדי לכתוב, להריץ ולקבל משוב — התחבר עם חשבון Google. לוקח שנייה.
המשוב נוצר על ידי AI ועשוי לטעות. אם אתה חושב שהפתרון שלך נכון —
כנראה שאתה צודק. הציון כאן הוא לתרגול בלבד ואינו מדווח לאיש.
אל תכתוב בקוד פרטים אישיים כמו שם מלא, טלפון או כתובת. הקוד נשלח לשירות
בדיקה חיצוני.