- 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
- 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
- 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다.
- 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
- 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다.
- 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다.
-
다음 Car 객체를 활용해 구현해야 한다.
-
Car 기본 생성자를 추가할 수 없다.
-
name, position 변수의 접근 제어자인 private을 변경할 수 없다.
-
가능하면 setPosition(int position) 메소드를 추가하지 않고 구현한다
public class Car { private final String name; private int position = 0; public Car(String name) { this.name = name; } // 추가 기능 구현 }
-
3항 연산자를 쓰지 않는다.
-
indent(인덴트,들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다.
- 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
- 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다.
-
자바 코드 컨벤션을 지키면서 프로그래밍한다.
- https://naver.github.io/hackday-conventions-java/ : 좀 더 개선된 컨벤션 참고 문서
-
함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다.
- 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다
-
else 예약어를 쓰지 않는다.
- 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
- else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다.
- 메소드 이름은 '클래스명.메소드명'으로 쓰여 있습니다.
| 기능 | 메소드 이름 | 입력 | 출력 |
|---|---|---|---|
| 게임을 시작한다. | Game.startGame() | 없음 | 없음 |
| 각 자동차의 이름을 하나의 String으로 입력받는다. | User.getCarNames() | 사용자 입력 (쉼표로 구분된 이름들) | 이름이 담긴 배열 |
| 입력받은 String을 쉼표를 기준으로 나눈다. (예외처리↓) | User.getCarArray() | 쉼표로 구분된 이름들 | 이름이 담긴 배열 |
| 전달받은 배열의 요소들을 이름으로 하는 Car 객체를 만들어 cars 리스트에 넣는다. | Game.enrollPlayers() | 이름이 담긴 배열 | Car 객체들 |
| 실행할 턴 횟수를 사용자에게 물어본다. (예외처리↓) | User.getTurnNumber() | 사용자 입력 (숫자) | 턴 횟수 |
| 게임을 시작한다. | Game.startRace() | 턴 횟수 | 없음 |
| 각각의 Car 객체를 한 번씩 호출해 턴을 진행한다. | Game.playOneTurn() | 없음 | 없음 |
| 자신의 턴을 진행한다. 0부터 9까지의 랜덤 숫자 하나를 뽑아 4 이상이면 앞으로 간다. | Car.playTurn() | 없음 | 없음 |
| position에 1을 더해 앞으로 간다. | Car.proceed() | 없음 | 없음 |
| 자동차의 이름을 리턴한다. | Car.getName() | 없음 | Name |
| 자동차의 위치를 리턴한다. | Car.getPosition() | 없음 | position |
| 각 자동차의 현재 위치를 화면에 출력한다. | Game.printPosition() | Car 객체 | 현재 위치를 시각적으로 보여줌 |
| 위치를 나타내는 바 갯수를 계산해 화면에 출력한다. | Game.getBar() | Car 객체 | 위치 바 |
| 우승자 목록을 화면에 출력한다. | Game.printWinner() | 우승자(들)의 리스트 | 우승자 목록 출력 |
| 우승자가 누구인지 찾는다. 최고 득점을 한 플레이어가 우승자이며 두 명 이상의 우승자가 있을 수 있다. | Game.getWinner() | 없음 | 우승자(들)의 리스트 |
| 자동차들의 점수를 조사해 최고 점수를 찾는다. | Game.getMaxScore() | 없음 | 최고 점수 |
| 예외 상황 | 처리하는 메소드 / 로직 |
|---|---|
| 입력받은 이름들 중 일부의 길이가 5자가 넘거나, 맨 앞이나 뒤에 쉼표를 넣거나, 쉼표를 연달아 입력한 경우. | User.verifyCarName() |
| 입력받은 턴 횟수가 음수인 경우 | User.getPositiveInt() |
| 턴 횟수에 정수가 아닌 실수나 문자열 등을 입력한 경우 | try ~ catch(InputMismatchException() |