תרגול מדעי המחשב

מחלקה שמנהלת מערך עצמים

מאתגר Java

המשימה

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

בנה מחלקה בשם Race שמנהלת את המתחרים במרוץ:
• תכונה פרטית: מערך של מתחרים בגודל קבוע (הגודל מתקבל בבנאי).
• תכונה פרטית: count — כמה מתחרים נרשמו בפועל.
• בנאי שמקבל את הגודל המרבי.
• פעולה add שמקבלת מתחרה ומוסיפה אותו. אם המערך מלא — אין להוסיף,
  והפעולה מחזירה false. אחרת מוסיפה ומחזירה true.
• פעולה fastest שמחזירה את המתחרה המהיר ביותר, או null אם אין
  מתחרים כלל.
• פעולה average שמחזירה את זמן הריצה הממוצע, או 0 אם אין מתחרים.

הנחיות:
• count אינו אורך המערך. הלולאות חייבות לרוץ עד count ולא עד
  arr.length — אחרת יגיעו לתאים ריקים. זו הנקודה המרכזית כאן.
• מהיר ביותר = הזמן הנמוך ביותר.
• אל תשכח לקדם את count אחרי כל הוספה מוצלחת.
• בדוק מקרה של מרוץ ריק לפני שאתה ניגש לאיבר הראשון.

```ds:table
{"title":"המתחרים שבדוגמה","rows":[["שם","זמן"],["Dan","52.4"],["Rita","48.9"],["Omer","61.0"]]}
```

קוד הפתיחה

class Competitor {
    private String name;
    private double time;

    public Competitor(String name, double time) {
        this.name = name;
        this.time = time;
    }

    public String getName() { return this.name; }
    public double getTime() { return this.time; }
}

class Race {
    // תכונות: מערך מתחרים, ומונה כמה נרשמו בפועל

    public Race(int maxSize) {
        // אתחל את המערך ואת המונה
    }

    /** מוסיפה מתחרה. false אם המרוץ מלא. */
    public boolean add(Competitor c) {
        // כתוב את הפתרון כאן
        return false;
    }

    /** המתחרה עם הזמן הנמוך ביותר, או null אם אין מתחרים. */
    public Competitor fastest() {
        // כתוב את הפתרון כאן
        return null;
    }

    /** זמן ריצה ממוצע, או 0 אם אין מתחרים. */
    public double average() {
        // כתוב את הפתרון כאן
        return 0;
    }
}

public class Main {
    public static void main(String[] args) {
        Race r = new Race(3);

        System.out.println(r.fastest() == null);                    // true
        System.out.println(r.average());                            // 0.0

        System.out.println(r.add(new Competitor("Dan",  52.4)));    // true
        System.out.println(r.add(new Competitor("Rita", 48.9)));    // true
        System.out.println(r.add(new Competitor("Omer", 61.0)));    // true
        System.out.println(r.add(new Competitor("Late", 40.0)));    // false — מלא

        Competitor f = r.fastest();
        System.out.println(f == null ? "null" : f.getName());       // Rita
        System.out.println(r.average());                            // 54.1
    }
}

כדי לכתוב, להריץ ולקבל משוב — התחבר עם חשבון Google. לוקח שנייה.

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