정리 - 커스텀 컬렉션
Coddy Dart 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 110개 중 75번째.
챌린지
쉬움플레이어 점수를 추적하고 특수 메서드들이 어떻게 함께 작동하여 세련되고 전문적인 클래스를 만드는지 보여주는 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: 스코어보드를 함수처럼 호출하여 정렬된 순위를 가져온 후, 각 플레이어를 출력
}