המשימה
נתונה המחלקה Book עם שתי תכונות פרטיות: כותרת ושנה.
השלם אותה כך שתכלול:
• בנאי רגיל שמקבל כותרת ושנה.
• **בנאי העתקה** — בנאי שמקבל ספר קיים ובונה ממנו ספר חדש עם אותם
ערכים.
• פעולת setYear שמשנה את השנה.
• פעולה sameAs שמקבלת ספר אחר ומחזירה true אם שני הספרים בעלי אותה
כותרת ואותה שנה.
הנחיות:
• השוואת מחרוזות נעשית ב-equals ולא ב-== . השוואה ב-== משווה הפניות,
ולכן היא עלולה להחזיר false על שתי מחרוזות זהות.
• זו בדיוק הנקודה של התרגיל: `Book b = a;` אינו העתקה — שני השמות
מצביעים על אותו עצם, ושינוי דרך אחד נראה גם דרך השני. בנאי העתקה
יוצר עצם **חדש**, ולכן שינוי בו אינו משפיע על המקור.
• sameAs משווה ערכים, לא הפניות. שני עצמים נפרדים עם אותם ערכים —
התשובה true.
```ds:table
{"title":"הבדיקה שבקוד","rows":[["שלב","a","עותק","sameAs"],["אחרי ההעתקה","Dune 1965","Dune 1965","true"],["אחרי setYear(2000) על העותק","Dune 1965","Dune 2000","false"]]}
```
קוד הפתיחה
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 ועשוי לטעות. אם אתה חושב שהפתרון שלך נכון —
כנראה שאתה צודק. הציון כאן הוא לתרגול בלבד ואינו מדווח לאיש.
אל תכתוב בקוד פרטים אישיים כמו שם מלא, טלפון או כתובת. הקוד נשלח לשירות
בדיקה חיצוני.