Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,6 @@ out/

### VS Code ###
.vscode/

### CodeRabbit 무시 ###
.coderabbit.yaml
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ dependencies {

java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
languageVersion = JavaLanguageVersion.of(17)
}
}

Expand Down
21 changes: 21 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
1. 사용자로부터 자동차의 이름을 받기(쉼표로 구분)
- 이름은 공백 불가, 5이하 -> 그 외는 Exception
- 중복 이름 불가
- readLine() 사용, Scanner 사용 X
- 쉼표로 구분하기

2. 사용자로부터 몇번의 이동을 할 지 입력 받기
- 양의 정수로 받기 아니면 IllegalArgumentException
-

3. 앞으로 전진하기
- 랜덤 숫자는 0~9 사의 값 무작위로 추출
- Randoms.pickNumber() >= 4 이상이면 distance++
- 차수별로 실행결과 출력하기

4. 우승자 출력하기
- 각 차량마다 distance 비교해서 distance가 가장 큰 자동차 고르기
- 여러명일경우 , 로 구분하여 출력하기

5. 예외처리
- 잘못된 입력 시 IllegealArgumentException으로 프로그램 종료시키기
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
4 changes: 1 addition & 3 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
networkTimeout=10000
validateDistributionUrl=true
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
24 changes: 10 additions & 14 deletions gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

184 changes: 92 additions & 92 deletions gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions src/main/java/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import controller.RacingController;

public class Application {
public static void main(String[] args) {
try {
new RacingController().run();
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
}
16 changes: 16 additions & 0 deletions src/main/java/common/ErrorMessages.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package common;

public class ErrorMessages {

public static final String NAME_REQUIRED = "[ERROR] 이름 입력은 필수입니다.";
public static final String NAME_LENGTH = "[ERROR] 이름은 5자까지 입력 가능합니다.";
public static final String NAME_EMPTY = "[ERROR] 이름은 공백일 수 없습니다.";
public static final String NAME_DUPLICATION = "[ERROR] 이름은 중복될 수 없습니다.";
public static final String NUMBER_OF_MOVES = "[ERROR] 이동 횟수는 양의 정수여야 합니다.";

public static final String ASK_CAR_NAMES = "경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)";
public static final String ASK_ROUND_COUNT = "시도할 횟수는 몇 회인가요?";

public static final String PRINT_RESULT = "실행 결과";
public static final String WINNER_ANNOUNCEMENT = "최종 우승자: ";
}
50 changes: 50 additions & 0 deletions src/main/java/controller/RacingController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package controller;

import common.ErrorMessages;
import domain.car.Cars;
import service.RacingGame;
import view.InputView;
import view.OutputView;

public class RacingController {

private final InputView inputView = new InputView();
private final OutputView outputView = new OutputView();

public void run() {

outputView.askCarNames();
String namesRaw = inputView.readCarNames();
Cars cars = Cars.of(namesRaw);

outputView.askRoundCount();
String roundsRaw = inputView.readRoundCount();
int rounds = parsePositiveInt(roundsRaw);

RacingGame game = new RacingGame(cars);

outputView.printResult();
for (int i = 0; i < rounds; i++) {
game.playOneRound();
outputView.printRound(cars);
}

outputView.printWinners(cars.findWinners());
}

private int parsePositiveInt(String raw) {
if (raw == null || raw.trim().isEmpty()) {
throw new IllegalArgumentException(ErrorMessages.NUMBER_OF_MOVES);
}

try {
int n = Integer.parseInt(raw.trim());
if (n <= 0) {
throw new IllegalArgumentException(ErrorMessages.NUMBER_OF_MOVES);
}
return n;
} catch (NumberFormatException e) {
throw new IllegalArgumentException(ErrorMessages.NUMBER_OF_MOVES);
}
}
}
Loading