Menu
Coddy logo textTech

סיכום – מיון מותאם אישית

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 46 מתוך 87.

challenge icon

אתגר

קל

בואו נבנה מנהל אוסף ספרים שמשלב את כל מה שלמדת על שיטות מיוחדות ומיון. תיצור מחלקה Book עם מימוש מתאים של toString(), equals(), hashCode() וסדר טבעי באמצעות Comparable, לצד משווים חיצוניים לאפשרויות מיון גמישות.

תארגן את הקוד שלך בארבעה קבצים:

  • Book.java: צור מחלקה המייצגת ספר עם שלושה שדות פרטיים: title (String), author (String) ו-year (int). כלול בנאי ומתודות getter לכל השדות.

    המחלקה Book שלך צריכה לממש את Comparable<Book> עם סדר טבעי לפי year בסדר עולה (מהישן לחדש).

    דרוס את toString() כך שתחזיר: [title] by [author] ([year])

    דרוס את equals() כך ששני ספרים יהיו שווים כאשר יש להם אותו title וגם אותו author. דרוס את hashCode() באמצעות Objects.hash() עם אותם השדות.

  • TitleComparator.java: צור משווה שממיין ספרים לפי כותרת בסדר אלפביתי בסדר עולה (מ-A עד Z).
  • AuthorComparator.java: צור משווה שממיין ספרים לפי שם המחבר בסדר אלפביתי בסדר עולה (מ-A עד Z).
  • Main.java: חבר הכול יחד! תקבל קלט עבור שלושה ספרים, כל אחד בשורה נפרדת, בפורמט: title,author,year

    צור ArrayList של ספרים והדגם את שלוש גישות המיון:

    1. מיין לפי הסדר הטבעי (לפי השנה) והדפס כל ספר
    2. הדפס שורה ריקה
    3. מיין לפי הכותרת באמצעות TitleComparator והדפס כל ספר
    4. הדפס שורה ריקה
    5. מיין לפי שם המחבר באמצעות AuthorComparator והדפס כל ספר

תקבל שלוש שורות קלט, שכל אחת מכילה נתוני ספר בפורמט: title,author,year

לדוגמה: 1984,George Orwell,1949

זכור לייבא את java.util.Objects בקובץ Book.java, את java.util.Comparator בקובצי המשווים, ואת java.util.ArrayList, java.util.Collections ו-java.util.Scanner בקובץ Main.java.

נסו בעצמכם

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // קראו שלושה ספרים מהקלט
        String line1 = scanner.nextLine();
        String line2 = scanner.nextLine();
        String line3 = scanner.nextLine();
        
        // TODO: נתחו כל שורה כדי לחלץ את הכותרת, המחבר והשנה
        // רמז: השתמשו ב-split(",") כדי להפריד בין הערכים
        
        // TODO: צרו אובייקטים מסוג Book מהנתונים שחולצו
        
        // TODO: צרו ArrayList והוסיפו אליו את כל שלושת הספרים
        
        // TODO: מיינו לפי הסדר הטבעי (לפי שנה) והדפיסו כל ספר
        
        // TODO: הדפיסו שורה ריקה
        
        // TODO: מיינו לפי כותרת באמצעות TitleComparator והדפיסו כל ספר
        
        // TODO: הדפיסו שורה ריקה
        
        // TODO: מיינו לפי מחבר באמצעות AuthorComparator והדפיסו כל ספר
    }
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Java אונליין