camp.nextstep.edu.missionutils에서 제공하는Random과Console API를 사용하여 구현 사용자가 입력하는 값은camp.nextstep.edu.missionutils.Console의readLine()을 활용 Git의 커밋 단위는README.md에 정리한 기능 목록 단위로 추가
- JDK 21 버전에서 실행 가능해야 한다.
- 프로그램 실행의 시작점은 Application의 main()이다.
- build.gradle 파일은 변경할 수 없으며, 제공된 라이브러리 이외의 외부 라이브러리는 사용하지 않는다.
- 프로그램 종료 시 System.exit()를 호출하지 않는다.
- 프로그래밍 요구 사항에서 달리 명시하지 않는 한 파일, 패키지 등의 이름을 바꾸거나 이동하지 않는다.
- 자바 코드 컨벤션을 지키면서 프로그래밍한다.
- 기본적으로 Java Style Guide를 원칙으로 한다.
- indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다.
- 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
- 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메서드)를 분리하면 된다.
- 3항 연산자를 쓰지 않는다.
- 함수(또는 메서드)가 한 가지 일만 하도록 최대한 작게 만들어라.
- JUnit 5와 AssertJ를 이용하여 정리한 기능 목록이 정상적으로 작동하는지 테스트 코드로 확인한다.
- 테스트 도구 사용법이 익숙하지 않다면 아래 문서를 참고하여 학습한 후 테스트를 구현한다.
- 여러 역할을 수행하는 큰 함수를 단일 역할을 수행하는 작은 함수로 분리한다.
- 테스트 도구를 사용하는 방법을 배우고 프로그램이 제대로 작동하는지 테스트한다.
- 1주 차 공통 피드백을 최대한 반영한다.
- 사용자에게 자동차의 이름과 횟수 등을 입력받는 기능
- 경주할 자동차의 이름을 입력받는다.
- 만약 띄어쓰기만 입력받은 경우
잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다. - 문자열이 아무것도 안들어온 경우
잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다.
- 만약 띄어쓰기만 입력받은 경우
- 시도할 횟수를 입력받는다.
- 문자열이 빈 칸이거나 띄어쓰기일 경우
잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다.
- 문자열이 빈 칸이거나 띄어쓰기일 경우
- 경주할 자동차의 이름을 입력받는다.
-
실행 문구를 출력하는 기능
- 이름 입력 문구
경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분) - 횟수 입력 문구
시도할 횟수는 몇 회인가요? - 실행 결과 문구
실행 결과 - 경주 경과 문구
<자동차 이름> : <실행 결과>- 예)
pobi : ---
- 예)
- 우승자 발표 문구
최종 우승자 : <자동차 이름>- 단독 우승일 경우
최종 우승자 : pobi - 공동 우승일 경우
최종 우승자 : pobi, jun
- 단독 우승일 경우
- 이름 입력 문구
-
예시
경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)
pobi,woni,jun
시도할 횟수는 몇 회인가요?
5
실행 결과
pobi : -
woni :
jun : -
pobi : --
woni : -
jun : --
pobi : ---
woni : --
jun : ---
pobi : ----
woni : ---
jun : ----
pobi : -----
woni : ----
jun : -----
최종 우승자 : pobi, jun
- 자동차의 이름과 차수 별 이동 거리를 저장한다.
- name distance
- Comparable 인터페이스를 상속받아서 이동 거리를 기준으로 순서를 비교할 수 있도록 구현한다.
- 차수 별 이동거리를 계산한다.
- 실행 결과는
camp.nextstep.edu.missionutils에서 제공하는Randoms.pickNumberInRange(0, 9);를 사용하여 나온 값을 기존 실행결과와 합하는 방식으로 계산한다. - 랜덤 값이 4 이상 나올 때만 전진한다.
- 실행 결과는
- 자동차의 이름과 이동 거리를 문자열로 만들어 반환한다.
- toString()을 오버라이드 해서 구현한다.
- 자동차 Set을 저장한다.
- 자동차 이름 리스트를 받을 경우 각각 자동차 객체를 만들어 Set에 저장한다.
- 횟수마다 Set에서 데이터를 꺼내 자동차를 이동하도록 한 후 결과를 반환한다.
- 자동차 Set에서 이동 거리를 가져와서 우승자를 계산한다.
- 경주할 자동차의 이름은 쉼표
,로 구분한다.-
,옆에 띄어쓰기가 들어갈 경우 띄어쓰기를 제거하여 문자열을 분리한다. - 입력 받은 자동차는 중복을 허용하지 않는다.
- 중복된 입력을 받을 경우
잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다.
- 중복된 입력을 받을 경우
- 이름이 5자 이상일 경우
잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다.
-
- 입력받은 실행 횟수를 정수형으로 변환시킨다.
- 음수, 0일 경우
잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다. - 정수형이 아닌 문자열일 경우
잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다. - 시도할 횟수가 정수형의 범위를 초과하는 경우
잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다.
- 음수, 0일 경우
- 우승자의 이름 리스트를 받아서
,로 이어붙여 문자열을 만든다.
- Exception을 일으키는 기능
