Skip to content

atnesyt/java-racingcar-7

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

자동차 경주 기능 명세서

camp.nextstep.edu.missionutils에서 제공하는 RandomConsole API를 사용하여 구현 사용자가 입력하는 값은 camp.nextstep.edu.missionutils.ConsolereadLine()을 활용 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주 차 공통 피드백을 최대한 반영한다.

I/O

입력

  • 사용자에게 자동차의 이름과 횟수 등을 입력받는 기능
    • 경주할 자동차의 이름을 입력받는다.
      • 만약 띄어쓰기만 입력받은 경우 잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다.
      • 문자열이 아무것도 안들어온 경우 잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다.
    • 시도할 횟수를 입력받는다.
      • 문자열이 빈 칸이거나 띄어쓰기일 경우 잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다.

출력

  • 실행 문구를 출력하는 기능

    • 이름 입력 문구 경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)
    • 횟수 입력 문구 시도할 횟수는 몇 회인가요?
    • 실행 결과 문구 실행 결과
    • 경주 경과 문구 <자동차 이름> : <실행 결과>
      • 예) 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에서 이동 거리를 가져와서 우승자를 계산한다.

Util

  • 경주할 자동차의 이름은 쉼표,로 구분한다.
    • ,옆에 띄어쓰기가 들어갈 경우 띄어쓰기를 제거하여 문자열을 분리한다.
    • 입력 받은 자동차는 중복을 허용하지 않는다.
      • 중복된 입력을 받을 경우 잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다.
    • 이름이 5자 이상일 경우 잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다.
  • 입력받은 실행 횟수를 정수형으로 변환시킨다.
    • 음수, 0일 경우 잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다.
    • 정수형이 아닌 문자열일 경우 잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다.
    • 시도할 횟수가 정수형의 범위를 초과하는 경우 잘못된 입력입니다.라는 문구와 함께 예외를 발생시킨다.
  • 우승자의 이름 리스트를 받아서 , 로 이어붙여 문자열을 만든다.

Exception

  • Exception을 일으키는 기능

프로젝트 전체 구조 설계

4E13F15A-BD1F-4345-BCC4-39395A031B3E_1_102_a

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%