Menu
Coddy logo textTech

Повторение — Пользовательская коллекция

Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 75 из 110.

challenge icon

Задание

Легко

Давайте создадим систему ScoreBoard, которая отслеживает очки игроков и демонстрирует, как специальные методы работают вместе для создания отточенного, профессионального класса!

Вы организуете свой код в двух файлах:

  • score_board.dart: Создайте класс Player и класс ScoreBoard, которые работают вместе для управления игровыми очками.

    Ваш класс Player должен иметь name (String) и score (int). Ему необходимо:

    • Реализовать Comparable<Player>, чтобы игроков можно было сортировать по количеству очков в порядке убывания (сначала самые высокие)
    • Переопределить == и hashCode, чтобы два игрока с одинаковым именем считались равными (независимо от количества очков)
    • Переопределить toString(), чтобы он возвращал: [name]: [score] points

    Ваш класс ScoreBoard должен хранить список игроков и предоставлять:

    • Метод addPlayer(Player player), который добавляет игрока только в том случае, если он еще не существует (используйте вашу реализацию равенства!)
    • Метод call(), который не принимает аргументов и возвращает отсортированную копию списка игроков (отсортированную по очкам, сначала самые высокие)
    • Переопределить toString() для отображения всех игроков (неотсортированных), по одному в строке, с заголовком ScoreBoard: в первой строке
  • main.dart: Импортируйте файл таблицы очков и продемонстрируйте, как все эти специальные методы работают вместе:
    • Создайте ScoreBoard
    • Добавьте этих игроков: Alice с 150, Bob с 200, Charlie с 175
    • Попробуйте снова добавить Alice с очками 999 (она должна быть отклонена как дубликат)
    • Распечатайте таблицу очков, используя её toString()
    • Распечатайте пустую строку
    • Распечатайте Rankings:
    • Вызовите таблицу очков как функцию, чтобы получить отсортированный рейтинг, а затем распечатайте каждого игрока

Этот челлендж объединяет toString() для отображения, == и hashCode для обнаружения дубликатов, compareTo() для сортировки и call() для чистого интерфейса вызова!

Ожидаемый вывод:

ScoreBoard:
Alice: 150 points
Bob: 200 points
Charlie: 175 points

Rankings:
Bob: 200 points
Charlie: 175 points
Alice: 150 points

Попробуйте сами

import 'score_board.dart';

void main() {
  // TODO: Создайте ScoreBoard

  // TODO: Добавьте игроков: Alice (150), Bob (200), Charlie (175)

  // TODO: Попробуйте снова добавить Alice со счетом 999 (должно быть отклонено как дубликат)

  // TODO: Выведите таблицу лидеров, используя её toString()

  // TODO: Выведите пустую строку

  // TODO: Выведите "Rankings:"

  // TODO: Вызовите таблицу лидеров как функцию, чтобы получить отсортированный рейтинг, затем выведите каждого игрока
}

Все уроки раздела Объектно-ориентированное программирование