From 07cc0cc21ef71f9a1a20b2342b84df61a27eddc0 Mon Sep 17 00:00:00 2001 From: Arachne Date: Thu, 8 Jun 2023 19:28:04 +0900 Subject: [PATCH 1/3] race --- src/main/java/racingcar/Application.java | 2 + src/main/java/racingcar/Car.java | 38 +++++++++- src/main/java/racingcar/Race.java | 91 ++++++++++++++++++++++++ 3 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 src/main/java/racingcar/Race.java diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index b9ed0456a3..9cda5827c3 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -2,6 +2,8 @@ public class Application { public static void main(String[] args) { + Race race = new Race(); + race.run(); // TODO 구현 진행 } } diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index ab3df94921..1245d29f02 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,5 +1,7 @@ package racingcar; +import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; + public class Car { private final String name; private int position = 0; @@ -7,6 +9,40 @@ public class Car { public Car(String name) { this.name = name; } + public String getName() + { + return name; + } + public int getPosition() + { + return position; + } + public void start() + { + int dice = pickNumberInRange(0,9); + if (canGo(dice)) + move(); + } + private boolean canGo(int dice) + { + if (dice >= 4) + return true; + return false; + } + private void move() + { + position += 1; + } + public String toString() + { + StringBuilder sb = new StringBuilder(); + sb.append(name).append(" : "); + + for(int i=0;i car.getPosition()==winnerDistance) + .toArray(Car[]::new); + } + private void printWinnerName(Car[] winners) + { + + System.out.println(FINAL_WINNER+); + } + private String getWinnerName(Car[] winners) + { + return Arrays.stream(winners).map(Car::getName).collect(String.join()); + } +} From 90abe32a50a32f5e9d9604f8e4c07557b33cfd77 Mon Sep 17 00:00:00 2001 From: Arachne Date: Thu, 8 Jun 2023 20:14:58 +0900 Subject: [PATCH 2/3] test --- src/main/java/racingcar/Application.java | 1 - src/main/java/racingcar/Race.java | 68 ++++++++++++++++---- src/test/java/racingcar/ApplicationTest.java | 9 +++ 3 files changed, 64 insertions(+), 14 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 9cda5827c3..028c802270 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -4,6 +4,5 @@ public class Application { public static void main(String[] args) { Race race = new Race(); race.run(); - // TODO 구현 진행 } } diff --git a/src/main/java/racingcar/Race.java b/src/main/java/racingcar/Race.java index 37e8c1d660..422a2d8936 100644 --- a/src/main/java/racingcar/Race.java +++ b/src/main/java/racingcar/Race.java @@ -10,15 +10,15 @@ public class Race private static final String INPUT_ROUND = "시도할 회수는 몇회인가요?"; private static final String RESULT_HEAD = "실행 결과"; private static final String FINAL_WINNER = "최종 우승자 : "; + private static final String ERRMASSAGE = "[ERROR] 이름은 5글자 이하여야 합니다."; + private static final String ERRROUNDMESSAGE = "[ERROR] 시도 횟수는 숫자여야 한다."; - private static String[] carnames; private static Car[] cars; - private static int numberOfCars; public void run() { - getCarsName(); - makeCars(); + String[] carnames = getCarsName(); + makeCars(carnames); int round = getRound(); startRace(round); @@ -26,20 +26,49 @@ public void run() Car[] winners = calWinners(); printWinnerName(winners); } - private void getCarsName() + private String[] getCarsName() { - System.out.println(INPUT_NAME); - carnames = readLine().split(","); - numberOfCars = carnames.length; + String[] carnames; + while(true) + { + try + { + System.out.println(INPUT_NAME); + carnames = readLine().split(","); + validateNames(carnames); + break; + } catch (IllegalArgumentException e) + { + System.out.println(e.getMessage()); + } + } + return carnames; } - private void makeCars() + private void makeCars(String[] carnames) { cars = Arrays.stream(carnames).map(Car::new).toArray(Car[]::new); } private int getRound() { System.out.println(INPUT_ROUND); - return Integer.parseInt(readLine()); + String input; + while(true) + { + try{ + input = readLine(); + validateRoundInput(input); + break; + } catch (IllegalArgumentException e){ + System.out.println(e.getMessage()); + } + } + return Integer.parseInt(input); + } + private void validateRoundInput(String input) + { + if(input.chars().allMatch(Character::isDigit)) + return; + throw new IllegalArgumentException(ERRROUNDMESSAGE); } private void startRace(int round) { @@ -81,11 +110,24 @@ private Car[] getWinner(int winnerDistance) } private void printWinnerName(Car[] winners) { - - System.out.println(FINAL_WINNER+); + System.out.println(FINAL_WINNER+getWinnerName(winners)); } private String getWinnerName(Car[] winners) { - return Arrays.stream(winners).map(Car::getName).collect(String.join()); + return Arrays.stream(winners).map(Car::getName).collect(Collectors.joining(", ")); + } + private boolean validateNameLength(String name) + { + return name.length() > 5; + } + private void validateNames(String[] carnames) + { + for(String carname:carnames) + { + if(validateNameLength(carname)) + { + throw new IllegalArgumentException(ERRMASSAGE); + } + } } } diff --git a/src/test/java/racingcar/ApplicationTest.java b/src/test/java/racingcar/ApplicationTest.java index 8f6f70a218..a88c37cc22 100644 --- a/src/test/java/racingcar/ApplicationTest.java +++ b/src/test/java/racingcar/ApplicationTest.java @@ -33,6 +33,15 @@ class ApplicationTest extends NsTest { } ); } + @Test + void 라운드에_대한_예외_처리() { + assertSimpleTest( + () -> { + runException("pobi,java","abd"); + assertThat(output()).contains(ERROR_MESSAGE); + } + ); + } @Override public void runMain() { From bda91dc9a3496ebb93d592479bbf4b05b963ed48 Mon Sep 17 00:00:00 2001 From: Arachne <66822642+Arachneee@users.noreply.github.com> Date: Sat, 10 Jun 2023 22:05:30 +0900 Subject: [PATCH 3/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ac237bb906..f7a9546d47 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ - 미션은 **기능 요구사항, 프로그래밍 요구사항, 과제 진행 요구사항** 세 가지로 구성되어 있다. - 세 개의 요구사항을 만족하기 위해 노력한다. 특히 기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋 하는 방식으로 진행한다. -## ✉️ 미션 제출 방법 +## ✉️ 미션 제출 방법 - 미션 구현을 완료한 후 GitHub을 통해 제출해야 한다. - GitHub을 활용한 제출 방법은 [프리코스 과제 제출 문서](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) 를 참고해 제출한다.