From 1613bb7983987f6fce5691a92af4920898834ac9 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Tue, 14 Mar 2023 23:28:08 +0900 Subject: [PATCH 01/30] docs: update manual.md --- src/main/java/racingcar/manual.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/racingcar/manual.md diff --git a/src/main/java/racingcar/manual.md b/src/main/java/racingcar/manual.md new file mode 100644 index 0000000..2e4d5d5 --- /dev/null +++ b/src/main/java/racingcar/manual.md @@ -0,0 +1,10 @@ +자동차 경주 게임 기능 구현 +====================== + +🗒️기능 목록 +-------- +### 1. 자동차가 주어진 Random 값에 따라 전진 혹은 멈추는 기능 +### 2. 입력받은 이동 횟수만큼 1의 함수를 실행시키는 기능 +### 3. 2에서 이동 횟수 입력이 잘못되었을때 에러를 발생시키고 재입력받게 하는 기능 +### 4. 입력으로 주어진 이름을 받아 그것을 기반으로 Car Object를 생성하는 기능 +### 5. 결과를 출력하는 기능 From 494a07d1785fbf1c87316c71736e62229bf7562a Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Tue, 14 Mar 2023 23:45:56 +0900 Subject: [PATCH 02/30] feat: move function Add new function to class Car it makes self position increase by 1 when random number is bigger than 4 --- src/main/java/racingcar/Car.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index ab3df94..7af4dcf 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,5 +1,8 @@ package racingcar; +import camp.nextstep.edu.missionutils.Randoms; +import camp.nextstep.edu.missionutils.Console; + public class Car { private final String name; private int position = 0; @@ -9,4 +12,9 @@ public Car(String name) { } // 추가 기능 구현 + public void move(){ + if (Randoms.pickNumberInRange(0, 9) >= 4){ + this.position += 1; + } + } } From 71039f0052c3cdf00c7a3d6c32d292ade4d21522 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Wed, 15 Mar 2023 01:06:36 +0900 Subject: [PATCH 03/30] docs: add new manual --- src/main/java/racingcar/manual.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/racingcar/manual.md b/src/main/java/racingcar/manual.md index 2e4d5d5..da0b338 100644 --- a/src/main/java/racingcar/manual.md +++ b/src/main/java/racingcar/manual.md @@ -4,7 +4,8 @@ 🗒️기능 목록 -------- ### 1. 자동차가 주어진 Random 값에 따라 전진 혹은 멈추는 기능 -### 2. 입력받은 이동 횟수만큼 1의 함수를 실행시키는 기능 -### 3. 2에서 이동 횟수 입력이 잘못되었을때 에러를 발생시키고 재입력받게 하는 기능 -### 4. 입력으로 주어진 이름을 받아 그것을 기반으로 Car Object를 생성하는 기능 -### 5. 결과를 출력하는 기능 +### 2. 주어진 자동차들의 이름과 반복 횟수를 저장하는 기능 +### 3. 입력받은 이동 횟수만큼 1의 함수를 실행시키는 기능 +### 4. 2에서 이동 횟수 입력이 잘못되었을때 에러를 발생시키고 재입력받게 하는 기능 +### 5. 입력으로 주어진 이름을 받아 그것을 기반으로 Car Object를 생성하는 기능 +### 6. 결과를 출력하는 기능 From 0c861ab94bc1142b7c4a62da583a775bf122be63 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Wed, 15 Mar 2023 01:25:43 +0900 Subject: [PATCH 04/30] feat: add game method execute Car.move() method as many as input value --- src/main/java/racingcar/Car.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 7af4dcf..740f1dc 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -2,6 +2,7 @@ import camp.nextstep.edu.missionutils.Randoms; import camp.nextstep.edu.missionutils.Console; +import java.util.ArrayList; public class Car { private final String name; @@ -17,4 +18,12 @@ public void move(){ this.position += 1; } } + public static void game(Arraylist cars){ + int num = Integer.parseInt(Console.readLine()); + for (Car car : carlist){ + for (int i = 0; i < num; i++){ + car.move(); + } + } + } } From 64e0e9f189123aedb930906dc4def552ab2a9844 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Wed, 15 Mar 2023 01:26:47 +0900 Subject: [PATCH 05/30] feat: add make method make Car object based on user input --- src/main/java/racingcar/Application.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index b9ed045..609432e 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,13 @@ package racingcar; +import camp.nextstep.edu.missionutils.Console; +import java.util.ArrayList; +import java.util.Arrays; + public class Application { public static void main(String[] args) { // TODO 구현 진행 + Arraylist cars = Car.make(); + Car.game(cars); } } From dfe3b19109efe9b9e63cc113e3d59610205072d7 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Wed, 15 Mar 2023 02:00:44 +0900 Subject: [PATCH 06/30] docs: delete manual item --- src/main/java/racingcar/manual.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/racingcar/manual.md b/src/main/java/racingcar/manual.md index da0b338..ebf2425 100644 --- a/src/main/java/racingcar/manual.md +++ b/src/main/java/racingcar/manual.md @@ -4,8 +4,7 @@ 🗒️기능 목록 -------- ### 1. 자동차가 주어진 Random 값에 따라 전진 혹은 멈추는 기능 -### 2. 주어진 자동차들의 이름과 반복 횟수를 저장하는 기능 -### 3. 입력받은 이동 횟수만큼 1의 함수를 실행시키는 기능 -### 4. 2에서 이동 횟수 입력이 잘못되었을때 에러를 발생시키고 재입력받게 하는 기능 -### 5. 입력으로 주어진 이름을 받아 그것을 기반으로 Car Object를 생성하는 기능 -### 6. 결과를 출력하는 기능 +### 2. 입력받은 이동 횟수만큼 1의 함수를 실행시키는 기능 +### 3. 2에서 이동 횟수 입력이 잘못되었을때 에러를 발생시키고 재입력받게 하는 기능 +### 4. 입력으로 주어진 이름을 기반으로 Car Object를 생성하는 기능 +### 5. 결과를 출력하는 기능 From 79e996ee8df246d25c8547b237d9f4dd25e83a0b Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Wed, 15 Mar 2023 02:02:11 +0900 Subject: [PATCH 07/30] fix: typo Arraylist -> ArrayList --- src/main/java/racingcar/Car.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 740f1dc..1fd7956 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -2,7 +2,10 @@ import camp.nextstep.edu.missionutils.Randoms; import camp.nextstep.edu.missionutils.Console; +import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.Arrays; +import net.bytebuddy.description.type.TypeList.Generic; public class Car { private final String name; @@ -18,12 +21,21 @@ public void move(){ this.position += 1; } } - public static void game(Arraylist cars){ + public static void game(ArrayList cars){ int num = Integer.parseInt(Console.readLine()); - for (Car car : carlist){ + for (Car car : cars){ for (int i = 0; i < num; i++){ car.move(); } } } + public static ArrayList make(){ + ArrayList names = new ArrayList<>(Arrays.asList(Console.readLine().split(","))); + ArrayList Cars = new ArrayList(); + for (String name : names){ + Cars.add(new Car(name)); + } + + return Cars; + } } From e10a9cce0264fdd8a020f0bde0341f24f144a37f Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Wed, 15 Mar 2023 14:12:02 +0900 Subject: [PATCH 08/30] feat: add new func to show output Added new methods to Car.java: - getPosition() - printProgress() - printResult() --- src/main/java/racingcar/Car.java | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 1fd7956..0b9ac16 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -2,6 +2,7 @@ import camp.nextstep.edu.missionutils.Randoms; import camp.nextstep.edu.missionutils.Console; +import java.awt.List; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; @@ -15,6 +16,8 @@ public Car(String name) { this.name = name; } + public int getPosition() { return this.position; } + // 추가 기능 구현 public void move(){ if (Randoms.pickNumberInRange(0, 9) >= 4){ @@ -22,14 +25,19 @@ public void move(){ } } public static void game(ArrayList cars){ + System.out.println("시도할 회수는 몇회인가요?"); int num = Integer.parseInt(Console.readLine()); - for (Car car : cars){ - for (int i = 0; i < num; i++){ + for (int i = 0; i < num; i++){ + System.out.println("실행 결과"); + for (Car car : cars){ car.move(); + car.printProgress(); } + System.out.println(); } } public static ArrayList make(){ + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉽표(,) 기준으로 구분)"); ArrayList names = new ArrayList<>(Arrays.asList(Console.readLine().split(","))); ArrayList Cars = new ArrayList(); for (String name : names){ @@ -38,4 +46,24 @@ public static ArrayList make(){ return Cars; } + + public void printProgress(){ + String distance = new String(new char[this.position]).replace("\0", "-"); + System.out.printf("%s : %s%n", this.name, distance); + } + + public static void printResult(ArrayList cars){ + String winner = ""; + int winnerscore = -1; + + cars.sort((x, y) -> y.getPosition() - x.getPosition()); + for (Car car : cars){ + if (car.getPosition() >= winnerscore) { + winner += car.name + ", "; + winnerscore = car.position; + } + } + + System.out.printf("최종 우승자 : %s", winner.substring(0, winner.length() - 2)); + } } From 9b3f2c81b0509ac2430acf33b020f77d732c5916 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Thu, 16 Mar 2023 02:02:25 +0900 Subject: [PATCH 09/30] feat: add new error find features Added new methods to InputCheck.java: - inputCarNames() - iterateCars(ArrayList names) - inputRound() - match(String input) --- src/main/java/racingcar/InputCheck.java | 50 +++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/main/java/racingcar/InputCheck.java diff --git a/src/main/java/racingcar/InputCheck.java b/src/main/java/racingcar/InputCheck.java new file mode 100644 index 0000000..371ffda --- /dev/null +++ b/src/main/java/racingcar/InputCheck.java @@ -0,0 +1,50 @@ +package racingcar; + +import camp.nextstep.edu.missionutils.Console; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.regex.Pattern; + +public class InputCheck{ + + public InputCheck() {} + + public static ArrayList inputCarNames() { + while (true) { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉽표(,) 기준으로 구분)"); + ArrayList names = new ArrayList<>(Arrays.asList(Console.readLine().split(","))); + try { + iterateCars(names); + return names; + } catch(IllegalArgumentException e){ + System.out.println("[ERROR] 이름은 5자 이하만 가능하다."); + } + } + } + public static void iterateCars(ArrayList names) { + for (String name : names) { + if (name.length() > 5) { + throw new IllegalArgumentException(); + } + } + } + public static int inputRound(){ + while (true) { + System.out.println("시도할 회수는 몇회인가요?"); + try { + String input = Console.readLine(); + match(input); + return Integer.parseInt(input); + } catch (IllegalArgumentException e) { + System.out.println("[ERROR] 시도 횟수는 자연수인 숫자여야 한다."); + } + } + } + + public static void match(String input){ + String pattern ="^[0-9]+$"; + if (!Pattern.matches(pattern, input)){ + throw new IllegalArgumentException(); + } + } +} From 4178bf07819451612ad9a0e41e5414ab0a03a240 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Thu, 16 Mar 2023 02:03:15 +0900 Subject: [PATCH 10/30] docs: simpify fix sentence --- src/main/java/racingcar/manual.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/racingcar/manual.md b/src/main/java/racingcar/manual.md index ebf2425..5a9a129 100644 --- a/src/main/java/racingcar/manual.md +++ b/src/main/java/racingcar/manual.md @@ -5,6 +5,6 @@ -------- ### 1. 자동차가 주어진 Random 값에 따라 전진 혹은 멈추는 기능 ### 2. 입력받은 이동 횟수만큼 1의 함수를 실행시키는 기능 -### 3. 2에서 이동 횟수 입력이 잘못되었을때 에러를 발생시키고 재입력받게 하는 기능 +### 3. 입력이 잘못되었을때 에러를 발생시키고 재입력받게 하는 기능 ### 4. 입력으로 주어진 이름을 기반으로 Car Object를 생성하는 기능 ### 5. 결과를 출력하는 기능 From f10bbe7f8a39cea710fd2a17dd0659c26c3335e6 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Thu, 16 Mar 2023 02:04:53 +0900 Subject: [PATCH 11/30] docs: simplify fix sentence --- src/main/java/racingcar/manual.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/racingcar/manual.md b/src/main/java/racingcar/manual.md index 5a9a129..28f5e8b 100644 --- a/src/main/java/racingcar/manual.md +++ b/src/main/java/racingcar/manual.md @@ -5,6 +5,6 @@ -------- ### 1. 자동차가 주어진 Random 값에 따라 전진 혹은 멈추는 기능 ### 2. 입력받은 이동 횟수만큼 1의 함수를 실행시키는 기능 -### 3. 입력이 잘못되었을때 에러를 발생시키고 재입력받게 하는 기능 +### 3. 입력이 잘못되었을때 에러를 발생시키고 다시 입력받게 하는 기능 ### 4. 입력으로 주어진 이름을 기반으로 Car Object를 생성하는 기능 ### 5. 결과를 출력하는 기능 From 76357718ca81dc79336182fabd20a6d95934ce0f Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Thu, 16 Mar 2023 02:08:27 +0900 Subject: [PATCH 12/30] refactor: move input feature to InputCheck.java refactored methods: - game(ArrayList cars) - make() --- src/main/java/racingcar/Car.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 0b9ac16..34d97df 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,12 +1,8 @@ package racingcar; import camp.nextstep.edu.missionutils.Randoms; -import camp.nextstep.edu.missionutils.Console; -import java.awt.List; -import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.Arrays; -import net.bytebuddy.description.type.TypeList.Generic; + public class Car { private final String name; @@ -25,8 +21,7 @@ public void move(){ } } public static void game(ArrayList cars){ - System.out.println("시도할 회수는 몇회인가요?"); - int num = Integer.parseInt(Console.readLine()); + int num = InputCheck.inputRound(); for (int i = 0; i < num; i++){ System.out.println("실행 결과"); for (Car car : cars){ @@ -37,9 +32,8 @@ public static void game(ArrayList cars){ } } public static ArrayList make(){ - System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉽표(,) 기준으로 구분)"); - ArrayList names = new ArrayList<>(Arrays.asList(Console.readLine().split(","))); - ArrayList Cars = new ArrayList(); + ArrayList names = InputCheck.inputCarNames(); + ArrayList Cars = new ArrayList<>(); for (String name : names){ Cars.add(new Car(name)); } @@ -66,4 +60,4 @@ public static void printResult(ArrayList cars){ System.out.printf("최종 우승자 : %s", winner.substring(0, winner.length() - 2)); } -} +} \ No newline at end of file From 78a914ed8d692e3a2923b9640245fdde491eb5a2 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Thu, 16 Mar 2023 02:09:54 +0900 Subject: [PATCH 13/30] feat: make execute code --- src/main/java/racingcar/Application.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 609432e..9dc46ce 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,13 +1,12 @@ package racingcar; -import camp.nextstep.edu.missionutils.Console; import java.util.ArrayList; -import java.util.Arrays; public class Application { public static void main(String[] args) { // TODO 구현 진행 - Arraylist cars = Car.make(); + ArrayList cars = Car.make(); Car.game(cars); + Car.printResult(cars); } } From 7a8542e9fb2164e31353ce802d44b90fac8a5329 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Thu, 16 Mar 2023 03:00:25 +0900 Subject: [PATCH 14/30] refactor: make project convention style same as naver java convention --- src/main/java/racingcar/Application.java | 11 +-- src/main/java/racingcar/Car.java | 117 ++++++++++++----------- src/main/java/racingcar/InputCheck.java | 83 ++++++++-------- 3 files changed, 108 insertions(+), 103 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 9dc46ce..66736ae 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -3,10 +3,9 @@ import java.util.ArrayList; public class Application { - public static void main(String[] args) { - // TODO 구현 진행 - ArrayList cars = Car.make(); - Car.game(cars); - Car.printResult(cars); - } + public static void main(String[] args) { + ArrayList cars = Car.make(); + Car.game(cars); + Car.printResult(cars); + } } diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 34d97df..73b801f 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,63 +1,66 @@ package racingcar; -import camp.nextstep.edu.missionutils.Randoms; import java.util.ArrayList; +import camp.nextstep.edu.missionutils.Randoms; public class Car { - private final String name; - private int position = 0; - - public Car(String name) { - this.name = name; - } - - public int getPosition() { return this.position; } - - // 추가 기능 구현 - public void move(){ - if (Randoms.pickNumberInRange(0, 9) >= 4){ - this.position += 1; - } - } - public static void game(ArrayList cars){ - int num = InputCheck.inputRound(); - for (int i = 0; i < num; i++){ - System.out.println("실행 결과"); - for (Car car : cars){ - car.move(); - car.printProgress(); - } - System.out.println(); - } - } - public static ArrayList make(){ - ArrayList names = InputCheck.inputCarNames(); - ArrayList Cars = new ArrayList<>(); - for (String name : names){ - Cars.add(new Car(name)); - } - - return Cars; - } - - public void printProgress(){ - String distance = new String(new char[this.position]).replace("\0", "-"); - System.out.printf("%s : %s%n", this.name, distance); - } - - public static void printResult(ArrayList cars){ - String winner = ""; - int winnerscore = -1; - - cars.sort((x, y) -> y.getPosition() - x.getPosition()); - for (Car car : cars){ - if (car.getPosition() >= winnerscore) { - winner += car.name + ", "; - winnerscore = car.position; - } - } - - System.out.printf("최종 우승자 : %s", winner.substring(0, winner.length() - 2)); - } -} \ No newline at end of file + private final String name; + private int position = 0; + + public Car(String name) { + this.name = name; + } + + public int getPosition() { + return this.position; + } + + // 추가 기능 구현 + public void move() { + if (Randoms.pickNumberInRange(0, 9) >= 4) { + this.position += 1; + } + } + + public static void game(ArrayList cars) { + int num = InputCheck.inputRound(); + for (int i = 0; i < num; i++) { + System.out.println("실행 결과"); + for (Car car : cars) { + car.move(); + car.printProgress(); + } + System.out.println(); + } + } + + public static ArrayList make() { + ArrayList names = InputCheck.inputCarNames(); + ArrayList cars = new ArrayList<>(); + for (String name : names) { + cars.add(new Car(name)); + } + return cars; + } + + public void printProgress() { + String distance = new String(new char[this.position]).replace("\0", "-"); + System.out.printf("%s : %s%n", this.name, distance); + } + + public static void printResult(ArrayList cars) { + String winner = ""; + int winnerScore = -1; + + cars.sort((x, y) -> y.getPosition() - x.getPosition()); + for (Car car : cars) { + if (car.getPosition() >= winnerScore) { + winner += car.name + ", "; + winnerScore = car.position; + } + } + + System.out.printf("최종 우승자 : %s", winner.substring(0, winner.length() - 2)); + } +} diff --git a/src/main/java/racingcar/InputCheck.java b/src/main/java/racingcar/InputCheck.java index 371ffda..9254f9a 100644 --- a/src/main/java/racingcar/InputCheck.java +++ b/src/main/java/racingcar/InputCheck.java @@ -1,50 +1,53 @@ package racingcar; -import camp.nextstep.edu.missionutils.Console; import java.util.ArrayList; import java.util.Arrays; import java.util.regex.Pattern; -public class InputCheck{ +import camp.nextstep.edu.missionutils.Console; + +public class InputCheck { + public InputCheck() { + } + + public static ArrayList inputCarNames() { + while (true) { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉽표(,) 기준으로 구분)"); + ArrayList names = new ArrayList<>(Arrays.asList(Console.readLine().split(","))); + try { + iterateCars(names); + return names; + } catch (IllegalArgumentException e) { + System.out.println("[ERROR] 이름은 5자 이하만 가능하다."); + } + } + } - public InputCheck() {} + public static void iterateCars(ArrayList names) { + for (String name : names) { + if (name.length() > 5) { + throw new IllegalArgumentException(); + } + } + } - public static ArrayList inputCarNames() { - while (true) { - System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉽표(,) 기준으로 구분)"); - ArrayList names = new ArrayList<>(Arrays.asList(Console.readLine().split(","))); - try { - iterateCars(names); - return names; - } catch(IllegalArgumentException e){ - System.out.println("[ERROR] 이름은 5자 이하만 가능하다."); - } - } - } - public static void iterateCars(ArrayList names) { - for (String name : names) { - if (name.length() > 5) { - throw new IllegalArgumentException(); - } - } - } - public static int inputRound(){ - while (true) { - System.out.println("시도할 회수는 몇회인가요?"); - try { - String input = Console.readLine(); - match(input); - return Integer.parseInt(input); - } catch (IllegalArgumentException e) { - System.out.println("[ERROR] 시도 횟수는 자연수인 숫자여야 한다."); - } - } - } + public static int inputRound() { + while (true) { + System.out.println("시도할 회수는 몇회인가요?"); + try { + String input = Console.readLine(); + match(input); + return Integer.parseInt(input); + } catch (IllegalArgumentException e) { + System.out.println("[ERROR] 시도 횟수는 자연수인 숫자여야 한다."); + } + } + } - public static void match(String input){ - String pattern ="^[0-9]+$"; - if (!Pattern.matches(pattern, input)){ - throw new IllegalArgumentException(); - } - } + public static void match(String input) { + String pattern = "^[0-9]+$"; + if (!Pattern.matches(pattern, input)) { + throw new IllegalArgumentException(); + } + } } From 7254c16cbe983b1140297ea32d772b6010692c2b Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Tue, 21 Mar 2023 19:55:00 +0900 Subject: [PATCH 15/30] refactor(replace declaration type): ArrayList -> List --- src/main/java/racingcar/Application.java | 4 ++-- src/main/java/racingcar/Car.java | 15 +++++++++------ src/main/java/racingcar/InputCheck.java | 21 ++++++++++++++------- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 66736ae..ef556e8 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,10 +1,10 @@ package racingcar; -import java.util.ArrayList; +import java.util.List; public class Application { public static void main(String[] args) { - ArrayList cars = Car.make(); + List cars = Car.make(); Car.game(cars); Car.printResult(cars); } diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 73b801f..4be0bd4 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,6 +1,7 @@ package racingcar; import java.util.ArrayList; +import java.util.List; import camp.nextstep.edu.missionutils.Randoms; @@ -17,16 +18,18 @@ public int getPosition() { } // 추가 기능 구현 - public void move() { + private void move() { if (Randoms.pickNumberInRange(0, 9) >= 4) { this.position += 1; } } - public static void game(ArrayList cars) { + public static void game(List cars) { int num = InputCheck.inputRound(); for (int i = 0; i < num; i++) { System.out.println("실행 결과"); + // cars.forEach(Car::move); + // cars.forEach(Car::printProgress); for (Car car : cars) { car.move(); car.printProgress(); @@ -35,9 +38,9 @@ public static void game(ArrayList cars) { } } - public static ArrayList make() { - ArrayList names = InputCheck.inputCarNames(); - ArrayList cars = new ArrayList<>(); + public static List make() { + List names = InputCheck.inputCarNames(); + List cars = new ArrayList<>(); for (String name : names) { cars.add(new Car(name)); } @@ -49,7 +52,7 @@ public void printProgress() { System.out.printf("%s : %s%n", this.name, distance); } - public static void printResult(ArrayList cars) { + public static void printResult(List cars) { String winner = ""; int winnerScore = -1; diff --git a/src/main/java/racingcar/InputCheck.java b/src/main/java/racingcar/InputCheck.java index 9254f9a..9a47b9e 100644 --- a/src/main/java/racingcar/InputCheck.java +++ b/src/main/java/racingcar/InputCheck.java @@ -2,28 +2,35 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.regex.Pattern; import camp.nextstep.edu.missionutils.Console; -public class InputCheck { - public InputCheck() { - } +public final class InputCheck { - public static ArrayList inputCarNames() { + public static List inputCarNames() { while (true) { System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉽표(,) 기준으로 구분)"); - ArrayList names = new ArrayList<>(Arrays.asList(Console.readLine().split(","))); + List names = new ArrayList<>(Arrays.asList(Console.readLine().split(","))); try { iterateCars(names); + // names.forEach(InputCheck::stringCheck); return names; } catch (IllegalArgumentException e) { - System.out.println("[ERROR] 이름은 5자 이하만 가능하다."); + System.out.println(e.getMessage()); } } } - public static void iterateCars(ArrayList names) { + // public static void stringCheck(String name) { + // if (name.length() == 0 || name.length() > 5) { + // throw new IllegalArgumentException("[ERROR] 이름은 1~5자 사이로 작성하라."); + // } + // } + + public static void iterateCars(List names) { + for (String name : names) { if (name.length() > 5) { throw new IllegalArgumentException(); From f73573a3b8e9edc764380ada6a4fb0fbe794bebc Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Tue, 21 Mar 2023 23:17:38 +0900 Subject: [PATCH 16/30] refactor: Separate print func from Car.java --- src/main/java/racingcar/Output.java | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/main/java/racingcar/Output.java diff --git a/src/main/java/racingcar/Output.java b/src/main/java/racingcar/Output.java new file mode 100644 index 0000000..beb06a3 --- /dev/null +++ b/src/main/java/racingcar/Output.java @@ -0,0 +1,33 @@ +package racingcar; + +import java.util.ArrayList; +import java.util.List; + +public class Output { + public static void printProcedure(List cars) { + System.out.println("실행 결과"); + for (Car car : cars) { + String distance = new String(new char[car.getPosition()]).replace("\0", "-"); + System.out.printf("%s : %s%n", car.getName(), distance); + } + } + + static void printResult(List cars) { + List winner = new ArrayList<>(); + int maxValue = findMaxValue(cars); + + for (Car car : cars) { + if (car.getPosition() < maxValue) { + break; + } + winner.add(car.getName()); + } + + System.out.printf("최종 우승자 : %s", String.join(", ", winner)); + } + + private static int findMaxValue(List cars) { + cars.sort((x, y) -> y.getPosition() - x.getPosition()); + return cars.get(0).getPosition(); + } +} From 6330acedebe8aed4448b23215bb054b8d141be5f Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Tue, 21 Mar 2023 23:19:14 +0900 Subject: [PATCH 17/30] refactor: Separate func from Car.java -make() -run(List cars -start(List cars) --- src/main/java/racingcar/Car.java | 52 +++---------------------------- src/main/java/racingcar/Game.java | 30 ++++++++++++++++++ 2 files changed, 35 insertions(+), 47 deletions(-) create mode 100644 src/main/java/racingcar/Game.java diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 4be0bd4..a922418 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,8 +1,5 @@ package racingcar; -import java.util.ArrayList; -import java.util.List; - import camp.nextstep.edu.missionutils.Randoms; public class Car { @@ -17,53 +14,14 @@ public int getPosition() { return this.position; } + public String getName() { + return this.name; + } + // 추가 기능 구현 - private void move() { + void move() { if (Randoms.pickNumberInRange(0, 9) >= 4) { this.position += 1; } } - - public static void game(List cars) { - int num = InputCheck.inputRound(); - for (int i = 0; i < num; i++) { - System.out.println("실행 결과"); - // cars.forEach(Car::move); - // cars.forEach(Car::printProgress); - for (Car car : cars) { - car.move(); - car.printProgress(); - } - System.out.println(); - } - } - - public static List make() { - List names = InputCheck.inputCarNames(); - List cars = new ArrayList<>(); - for (String name : names) { - cars.add(new Car(name)); - } - return cars; - } - - public void printProgress() { - String distance = new String(new char[this.position]).replace("\0", "-"); - System.out.printf("%s : %s%n", this.name, distance); - } - - public static void printResult(List cars) { - String winner = ""; - int winnerScore = -1; - - cars.sort((x, y) -> y.getPosition() - x.getPosition()); - for (Car car : cars) { - if (car.getPosition() >= winnerScore) { - winner += car.name + ", "; - winnerScore = car.position; - } - } - - System.out.printf("최종 우승자 : %s", winner.substring(0, winner.length() - 2)); - } } diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java new file mode 100644 index 0000000..9fbe7c8 --- /dev/null +++ b/src/main/java/racingcar/Game.java @@ -0,0 +1,30 @@ +package racingcar; + +import java.util.ArrayList; +import java.util.List; + +public class Game { + + public static List make() { + List names = InputCheck.inputCarNames(); + List cars = new ArrayList<>(); + for (String name : names) { + cars.add(new Car(name)); + } + return cars; + } + + private static void run(List cars) { + int num = InputCheck.inputRound(); + for (int i = 0; i < num; i++) { + cars.forEach(Car::move); + Output.printProcedure(cars); + System.out.println(); + } + } + + public static void start(List cars) { + run(cars); + Output.printResult(cars); + } +} From 6e6c23babdcba5381f2a4d48f97ae118be87b6e7 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Tue, 21 Mar 2023 23:19:47 +0900 Subject: [PATCH 18/30] refactor: just fix some codes --- src/main/java/racingcar/Application.java | 5 ++--- src/main/java/racingcar/InputCheck.java | 26 ++++++++---------------- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index ef556e8..1cdcc94 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -4,8 +4,7 @@ public class Application { public static void main(String[] args) { - List cars = Car.make(); - Car.game(cars); - Car.printResult(cars); + List cars = Game.make(); + Game.start(cars); } } diff --git a/src/main/java/racingcar/InputCheck.java b/src/main/java/racingcar/InputCheck.java index 9a47b9e..a83b09e 100644 --- a/src/main/java/racingcar/InputCheck.java +++ b/src/main/java/racingcar/InputCheck.java @@ -14,8 +14,7 @@ public static List inputCarNames() { System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉽표(,) 기준으로 구분)"); List names = new ArrayList<>(Arrays.asList(Console.readLine().split(","))); try { - iterateCars(names); - // names.forEach(InputCheck::stringCheck); + names.forEach(InputCheck::nameCheck); return names; } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); @@ -23,18 +22,9 @@ public static List inputCarNames() { } } - // public static void stringCheck(String name) { - // if (name.length() == 0 || name.length() > 5) { - // throw new IllegalArgumentException("[ERROR] 이름은 1~5자 사이로 작성하라."); - // } - // } - - public static void iterateCars(List names) { - - for (String name : names) { - if (name.length() > 5) { - throw new IllegalArgumentException(); - } + private static void nameCheck(String name) { + if (name.length() == 0 || name.length() > 5) { + throw new IllegalArgumentException("[ERROR] 이름은 1~5자 사이로 작성하라."); } } @@ -43,18 +33,18 @@ public static int inputRound() { System.out.println("시도할 회수는 몇회인가요?"); try { String input = Console.readLine(); - match(input); + roundCheck(input); return Integer.parseInt(input); } catch (IllegalArgumentException e) { - System.out.println("[ERROR] 시도 횟수는 자연수인 숫자여야 한다."); + System.out.println(e.getMessage()); } } } - public static void match(String input) { + private static void roundCheck(String input) { String pattern = "^[0-9]+$"; if (!Pattern.matches(pattern, input)) { - throw new IllegalArgumentException(); + throw new IllegalArgumentException("[ERROR] 시도 횟수는 자연수인 숫자여야 한다."); } } } From 1ba30ddbffbc654ec0010f16c64fab6442e78582 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Wed, 22 Mar 2023 00:27:32 +0900 Subject: [PATCH 19/30] feat: make new instance parameter - private List carList --- src/main/java/racingcar/Game.java | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index 9fbe7c8..d545965 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -4,27 +4,25 @@ import java.util.List; public class Game { + private List carList = new ArrayList<>(); - public static List make() { + public void make() { List names = InputCheck.inputCarNames(); - List cars = new ArrayList<>(); for (String name : names) { - cars.add(new Car(name)); + this.carList.add(new Car(name)); } - return cars; } - private static void run(List cars) { + private void run() { int num = InputCheck.inputRound(); for (int i = 0; i < num; i++) { - cars.forEach(Car::move); - Output.printProcedure(cars); - System.out.println(); + this.carList.forEach(Car::move); + Output.printProcedure(this.carList); } } - public static void start(List cars) { - run(cars); - Output.printResult(cars); + public void start() { + run(); + Output.printResult(this.carList); } } From 88db2a1398123a1f3a131b589034c8741db40dfe Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Wed, 22 Mar 2023 00:28:13 +0900 Subject: [PATCH 20/30] style: change parameter name - cars -> carList --- src/main/java/racingcar/Application.java | 7 +++---- src/main/java/racingcar/InputCheck.java | 13 ++++++------- src/main/java/racingcar/Output.java | 17 +++++++++-------- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 1cdcc94..1930b19 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,10 +1,9 @@ package racingcar; -import java.util.List; - public class Application { public static void main(String[] args) { - List cars = Game.make(); - Game.start(cars); + Game game = new Game(); + game.make(); + game.start(); } } diff --git a/src/main/java/racingcar/InputCheck.java b/src/main/java/racingcar/InputCheck.java index a83b09e..44a35af 100644 --- a/src/main/java/racingcar/InputCheck.java +++ b/src/main/java/racingcar/InputCheck.java @@ -1,6 +1,5 @@ package racingcar; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; @@ -12,9 +11,9 @@ public final class InputCheck { public static List inputCarNames() { while (true) { System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉽표(,) 기준으로 구분)"); - List names = new ArrayList<>(Arrays.asList(Console.readLine().split(","))); + List names = Arrays.asList(Console.readLine().split(",")); try { - names.forEach(InputCheck::nameCheck); + names.forEach(InputCheck::checkName); return names; } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); @@ -22,8 +21,8 @@ public static List inputCarNames() { } } - private static void nameCheck(String name) { - if (name.length() == 0 || name.length() > 5) { + private static void checkName(String name) { + if (name.trim().length() == 0 || name.trim().length() > 5) { throw new IllegalArgumentException("[ERROR] 이름은 1~5자 사이로 작성하라."); } } @@ -33,7 +32,7 @@ public static int inputRound() { System.out.println("시도할 회수는 몇회인가요?"); try { String input = Console.readLine(); - roundCheck(input); + checkRound(input); return Integer.parseInt(input); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); @@ -41,7 +40,7 @@ public static int inputRound() { } } - private static void roundCheck(String input) { + private static void checkRound(String input) { String pattern = "^[0-9]+$"; if (!Pattern.matches(pattern, input)) { throw new IllegalArgumentException("[ERROR] 시도 횟수는 자연수인 숫자여야 한다."); diff --git a/src/main/java/racingcar/Output.java b/src/main/java/racingcar/Output.java index beb06a3..807fa62 100644 --- a/src/main/java/racingcar/Output.java +++ b/src/main/java/racingcar/Output.java @@ -4,19 +4,20 @@ import java.util.List; public class Output { - public static void printProcedure(List cars) { + public static void printProcedure(List carList) { System.out.println("실행 결과"); - for (Car car : cars) { + for (Car car : carList) { String distance = new String(new char[car.getPosition()]).replace("\0", "-"); System.out.printf("%s : %s%n", car.getName(), distance); } + System.out.println(); } - static void printResult(List cars) { + static void printResult(List carList) { List winner = new ArrayList<>(); - int maxValue = findMaxValue(cars); + int maxValue = findMaxValue(carList); - for (Car car : cars) { + for (Car car : carList) { if (car.getPosition() < maxValue) { break; } @@ -26,8 +27,8 @@ static void printResult(List cars) { System.out.printf("최종 우승자 : %s", String.join(", ", winner)); } - private static int findMaxValue(List cars) { - cars.sort((x, y) -> y.getPosition() - x.getPosition()); - return cars.get(0).getPosition(); + private static int findMaxValue(List carList) { + carList.sort((x, y) -> y.getPosition() - x.getPosition()); + return carList.get(0).getPosition(); } } From bfa1c4eeb198bba9bf213504f019f295d827b25b Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Fri, 24 Mar 2023 15:18:23 +0900 Subject: [PATCH 21/30] style: change parameter name - carList -> car --- src/main/java/racingcar/Game.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index d545965..517824e 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -4,25 +4,25 @@ import java.util.List; public class Game { - private List carList = new ArrayList<>(); + private List cars = new ArrayList<>(); public void make() { List names = InputCheck.inputCarNames(); for (String name : names) { - this.carList.add(new Car(name)); + this.cars.add(new Car(name)); } } private void run() { int num = InputCheck.inputRound(); for (int i = 0; i < num; i++) { - this.carList.forEach(Car::move); - Output.printProcedure(this.carList); + this.cars.forEach(Car::move); + Output.printProcedure(this.cars); } } public void start() { run(); - Output.printResult(this.carList); + Output.printResult(this.cars); } } From d90073c947021c4c090ab279707253a26255ba7a Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Fri, 24 Mar 2023 15:20:34 +0900 Subject: [PATCH 22/30] refactor: separate sort function from findMaxValue(...) new function - sortByPosition --- src/main/java/racingcar/Output.java | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/racingcar/Output.java b/src/main/java/racingcar/Output.java index 807fa62..c8ad7d7 100644 --- a/src/main/java/racingcar/Output.java +++ b/src/main/java/racingcar/Output.java @@ -4,20 +4,20 @@ import java.util.List; public class Output { - public static void printProcedure(List carList) { + public static void printProcedure(List cars) { System.out.println("실행 결과"); - for (Car car : carList) { + for (Car car : cars) { String distance = new String(new char[car.getPosition()]).replace("\0", "-"); System.out.printf("%s : %s%n", car.getName(), distance); } System.out.println(); } - static void printResult(List carList) { + static void printResult(List cars) { List winner = new ArrayList<>(); - int maxValue = findMaxValue(carList); + int maxValue = findMaxValue(cars); - for (Car car : carList) { + for (Car car : cars) { if (car.getPosition() < maxValue) { break; } @@ -27,8 +27,12 @@ static void printResult(List carList) { System.out.printf("최종 우승자 : %s", String.join(", ", winner)); } - private static int findMaxValue(List carList) { - carList.sort((x, y) -> y.getPosition() - x.getPosition()); - return carList.get(0).getPosition(); + private static int findMaxValue(List cars) { + sortByPosition(cars); + return cars.get(0).getPosition(); + } + + private static void sortByPosition(List cars) { + cars.sort((x, y) -> y.getPosition() - x.getPosition()); } } From 5a31b4472275a21c8e86b04089f08f2aea572d43 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Fri, 24 Mar 2023 15:32:28 +0900 Subject: [PATCH 23/30] refactor: add new function to start() make start() also execute make() function --- src/main/java/racingcar/Application.java | 1 - src/main/java/racingcar/Game.java | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 1930b19..62ab11c 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -3,7 +3,6 @@ public class Application { public static void main(String[] args) { Game game = new Game(); - game.make(); game.start(); } } diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index 517824e..412e87e 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -22,6 +22,7 @@ private void run() { } public void start() { + make(); run(); Output.printResult(this.cars); } From aa4752976bae8e4f34324113b7ae668c4bb2f80e Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Fri, 24 Mar 2023 15:40:01 +0900 Subject: [PATCH 24/30] refactor: simple fix --- src/main/java/racingcar/Output.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Output.java b/src/main/java/racingcar/Output.java index c8ad7d7..8413838 100644 --- a/src/main/java/racingcar/Output.java +++ b/src/main/java/racingcar/Output.java @@ -15,6 +15,7 @@ public static void printProcedure(List cars) { static void printResult(List cars) { List winner = new ArrayList<>(); + sortByPosition(cars); int maxValue = findMaxValue(cars); for (Car car : cars) { @@ -28,7 +29,6 @@ static void printResult(List cars) { } private static int findMaxValue(List cars) { - sortByPosition(cars); return cars.get(0).getPosition(); } From f5c5154a25172079228b86f754b061f059ed3c39 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Sat, 25 Mar 2023 15:05:54 +0900 Subject: [PATCH 25/30] refactor: move files to utility directory --- src/main/java/utility/InputCheck.java | 49 +++++++++++++++++++++++++++ src/main/java/utility/Output.java | 18 ++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/main/java/utility/InputCheck.java create mode 100644 src/main/java/utility/Output.java diff --git a/src/main/java/utility/InputCheck.java b/src/main/java/utility/InputCheck.java new file mode 100644 index 0000000..08411a8 --- /dev/null +++ b/src/main/java/utility/InputCheck.java @@ -0,0 +1,49 @@ +package utility; + +import java.util.Arrays; +import java.util.List; +import java.util.regex.Pattern; + +import camp.nextstep.edu.missionutils.Console; + +public final class InputCheck { + + public static List inputCarNames() { + while (true) { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉽표(,) 기준으로 구분)"); + List names = Arrays.asList(Console.readLine().split(",")); + try { + names.forEach(InputCheck::checkName); + return names; + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + } + } + } + + private static void checkName(String name) { + if (name.trim().length() == 0 || name.trim().length() > 5) { + throw new IllegalArgumentException("[ERROR] 이름은 1~5자 사이로 작성하라."); + } + } + + public static int inputRound() { + while (true) { + System.out.println("시도할 회수는 몇회인가요?"); + try { + String input = Console.readLine(); + checkRound(input); + return Integer.parseInt(input); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + } + } + } + + private static void checkRound(String input) { + String pattern = "^[0-9]+$"; + if (!Pattern.matches(pattern, input)) { + throw new IllegalArgumentException("[ERROR] 시도 횟수는 자연수인 숫자여야 한다."); + } + } +} diff --git a/src/main/java/utility/Output.java b/src/main/java/utility/Output.java new file mode 100644 index 0000000..ddb053d --- /dev/null +++ b/src/main/java/utility/Output.java @@ -0,0 +1,18 @@ +package utility; + +import java.util.List; + +import racingcar.Car; + +public class Output { + public static void printProcedure(List cars) { + System.out.println("실행 결과"); + cars.forEach(car -> System.out.println(car.toString())); + System.out.println(); + } + + public static void printResult(List winners) { + System.out.println("최종 우승자" + " : " + String.join(", ", winners)); + } + +} From b00e2b08411fd3eb3af3032e1e4068abe32ba6f6 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Sat, 25 Mar 2023 15:06:57 +0900 Subject: [PATCH 26/30] refactor: move files to utility directory --- src/main/java/racingcar/InputCheck.java | 49 ------------------------- src/main/java/racingcar/Output.java | 38 ------------------- 2 files changed, 87 deletions(-) delete mode 100644 src/main/java/racingcar/InputCheck.java delete mode 100644 src/main/java/racingcar/Output.java diff --git a/src/main/java/racingcar/InputCheck.java b/src/main/java/racingcar/InputCheck.java deleted file mode 100644 index 44a35af..0000000 --- a/src/main/java/racingcar/InputCheck.java +++ /dev/null @@ -1,49 +0,0 @@ -package racingcar; - -import java.util.Arrays; -import java.util.List; -import java.util.regex.Pattern; - -import camp.nextstep.edu.missionutils.Console; - -public final class InputCheck { - - public static List inputCarNames() { - while (true) { - System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉽표(,) 기준으로 구분)"); - List names = Arrays.asList(Console.readLine().split(",")); - try { - names.forEach(InputCheck::checkName); - return names; - } catch (IllegalArgumentException e) { - System.out.println(e.getMessage()); - } - } - } - - private static void checkName(String name) { - if (name.trim().length() == 0 || name.trim().length() > 5) { - throw new IllegalArgumentException("[ERROR] 이름은 1~5자 사이로 작성하라."); - } - } - - public static int inputRound() { - while (true) { - System.out.println("시도할 회수는 몇회인가요?"); - try { - String input = Console.readLine(); - checkRound(input); - return Integer.parseInt(input); - } catch (IllegalArgumentException e) { - System.out.println(e.getMessage()); - } - } - } - - private static void checkRound(String input) { - String pattern = "^[0-9]+$"; - if (!Pattern.matches(pattern, input)) { - throw new IllegalArgumentException("[ERROR] 시도 횟수는 자연수인 숫자여야 한다."); - } - } -} diff --git a/src/main/java/racingcar/Output.java b/src/main/java/racingcar/Output.java deleted file mode 100644 index 8413838..0000000 --- a/src/main/java/racingcar/Output.java +++ /dev/null @@ -1,38 +0,0 @@ -package racingcar; - -import java.util.ArrayList; -import java.util.List; - -public class Output { - public static void printProcedure(List cars) { - System.out.println("실행 결과"); - for (Car car : cars) { - String distance = new String(new char[car.getPosition()]).replace("\0", "-"); - System.out.printf("%s : %s%n", car.getName(), distance); - } - System.out.println(); - } - - static void printResult(List cars) { - List winner = new ArrayList<>(); - sortByPosition(cars); - int maxValue = findMaxValue(cars); - - for (Car car : cars) { - if (car.getPosition() < maxValue) { - break; - } - winner.add(car.getName()); - } - - System.out.printf("최종 우승자 : %s", String.join(", ", winner)); - } - - private static int findMaxValue(List cars) { - return cars.get(0).getPosition(); - } - - private static void sortByPosition(List cars) { - cars.sort((x, y) -> y.getPosition() - x.getPosition()); - } -} From 3de28a2142151939aa16a598fcfd84f47946f393 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Sat, 25 Mar 2023 15:07:38 +0900 Subject: [PATCH 27/30] refactor: move sort func to Sort.java --- src/main/java/utility/Sort.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/utility/Sort.java diff --git a/src/main/java/utility/Sort.java b/src/main/java/utility/Sort.java new file mode 100644 index 0000000..c704956 --- /dev/null +++ b/src/main/java/utility/Sort.java @@ -0,0 +1,12 @@ +package utility; + +import java.util.List; + +import racingcar.Car; + +public class Sort { + public static List sortByPosition(List cars) { + cars.sort((x, y) -> y.getPosition() - x.getPosition()); + return cars; + } +} From 4a7544cba0fc73df079e20cace28588fcc906894 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Sat, 25 Mar 2023 15:08:21 +0900 Subject: [PATCH 28/30] feat: overriding toString() --- src/main/java/racingcar/Car.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index a922418..621ab28 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -18,6 +18,11 @@ public String getName() { return this.name; } + public String toString() { + String distance = new String(new char[this.getPosition()]).replace("\0", "-"); + return this.getName() + " : " + distance; + } + // 추가 기능 구현 void move() { if (Randoms.pickNumberInRange(0, 9) >= 4) { From 582d57f25b5e00d8d98f256ca958007a1ca559d8 Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Sat, 25 Mar 2023 15:08:48 +0900 Subject: [PATCH 29/30] refactor: move sort func to Sort.java --- src/main/java/racingcar/Game.java | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index 412e87e..94c4679 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -3,10 +3,14 @@ import java.util.ArrayList; import java.util.List; +import utility.InputCheck; +import utility.Output; +import utility.Sort; + public class Game { private List cars = new ArrayList<>(); - public void make() { + private void make() { List names = InputCheck.inputCarNames(); for (String name : names) { this.cars.add(new Car(name)); @@ -21,9 +25,22 @@ private void run() { } } + public List findWinners() { + List winner = new ArrayList<>(); + List sortedCars = Sort.sortByPosition(this.cars); + int winnerScore = sortedCars.get(0).getPosition(); + for (Car car : sortedCars) { + if (car.getPosition() < winnerScore) { + break; + } + winner.add(car.getName()); + } + return winner; + } + public void start() { make(); run(); - Output.printResult(this.cars); + Output.printResult(findWinners()); } } From 7909af2273d8aadd8b42490616b5e995cba7236f Mon Sep 17 00:00:00 2001 From: Jaehooni <8362532@gmail.com> Date: Mon, 10 Apr 2023 01:35:04 +0900 Subject: [PATCH 30/30] feat: white space --- src/main/java/racingcar/Game.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index 94c4679..2422f96 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -35,6 +35,7 @@ public List findWinners() { } winner.add(car.getName()); } + return winner; }