From b4993b7728a057773d628e7d4598a81116d054d4 Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 24 Mar 2026 20:45:42 +0900 Subject: [PATCH 01/16] =?UTF-8?q?Docs:=20=EA=B4=80=EB=A0=A8=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=B0=8F=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=84=A4?= =?UTF-8?q?=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 26 ++++++++++++++++++++++++++ src/main/java/racingcar/Car.java | 4 ++++ src/main/java/racingcar/Race.java | 4 ++++ 3 files changed, 34 insertions(+) create mode 100644 src/main/java/racingcar/Car.java create mode 100644 src/main/java/racingcar/Race.java diff --git a/docs/README.md b/docs/README.md index e69de29..d5cf8be 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,26 @@ +## 과제 관련 기능목록 및 구현 방식 + +클래스 제작 : Race,Car + +Race는 Racing의 대한 전반적인 기능들을 담당 +Car는 전반적으로 자동차 자체의 기능 및 상태를 담당 + + +> ()는 메서드, 아무것도 없으면 상태로 확인해주세요 +## Car + 1. name : 이름 + 2. stack : 자동차가 얼마나 갔는지를 확인하기 위해 + 3. action () : stack이 증가 및 유지관련 메서드 + 4. toString() : Race관련 메세지를 출력해주는 메서드 + +## Race + 1. Race initCar() : 자동차 관련 세팅 메서드 + 2. Race start() : 실제 로직 + 3. Race initCount() : 몇번 돌지 등등 Race 관련 메서드 + 4. carList : list race 상황중 값을 담기 위해 + 5. final_victory : 이후 stream으로 값을 정리함 + 6. race_count : 몇번 반복할지 + +## Main method +1. Race 호출 + diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java new file mode 100644 index 0000000..246c8e5 --- /dev/null +++ b/src/main/java/racingcar/Car.java @@ -0,0 +1,4 @@ +package racingcar; + +public class Car { +} diff --git a/src/main/java/racingcar/Race.java b/src/main/java/racingcar/Race.java new file mode 100644 index 0000000..9de0578 --- /dev/null +++ b/src/main/java/racingcar/Race.java @@ -0,0 +1,4 @@ +package racingcar; + +public class Race { +} From 3d893ba3e831d613ecc98305d882160870fb2dac Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 24 Mar 2026 20:49:17 +0900 Subject: [PATCH 02/16] feat:Application start race --- src/main/java/racingcar/Application.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e..faf72d9 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -2,6 +2,10 @@ public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + Race race = new Race(); + race.start(); } } + + +// From 5aedd62312dda1d0a6ba9a7b3656f788412fefdd Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 24 Mar 2026 20:50:49 +0900 Subject: [PATCH 03/16] fix: docs:readme --- docs/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index d5cf8be..3cab4cc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,12 +6,13 @@ Race는 Racing의 대한 전반적인 기능들을 담당 Car는 전반적으로 자동차 자체의 기능 및 상태를 담당 -> ()는 메서드, 아무것도 없으면 상태로 확인해주세요 +> ()는 메서드, 아무것도 없으면 상태 및 에러 ## Car 1. name : 이름 2. stack : 자동차가 얼마나 갔는지를 확인하기 위해 3. action () : stack이 증가 및 유지관련 메서드 4. toString() : Race관련 메세지를 출력해주는 메서드 + 5. 에러 이름에 빈공간이 있는지 확인 ## Race 1. Race initCar() : 자동차 관련 세팅 메서드 From 0bae63fbc4f1c423431a9555ce9c827346179c52 Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 24 Mar 2026 20:52:20 +0900 Subject: [PATCH 04/16] feat:create --- src/main/java/racingcar/Car.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 246c8e5..1a93685 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,4 +1,16 @@ package racingcar; +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.stream.IntStream; + public class Car { + + private String name; + private int stack; + + public Car(String name) { + this.name = name; + } + } From 3dfd8ee21db4b6c8faeea8c08c5757a94218e246 Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 24 Mar 2026 20:53:02 +0900 Subject: [PATCH 05/16] feat:car-getter --- src/main/java/racingcar/Car.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 1a93685..8b60469 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -13,4 +13,15 @@ public Car(String name) { this.name = name; } + + public String getName() { + return name; + } + + + public int getStack() { + return stack; + } + + } From 000c7919ce73ff3c0db5ddaadc8bdb4645e83267 Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 24 Mar 2026 20:53:34 +0900 Subject: [PATCH 06/16] feat:car-action --- src/main/java/racingcar/Car.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 8b60469..9943160 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -24,4 +24,11 @@ public int getStack() { } + public void action(){ + int ck = Randoms.pickNumberInRange(0,9); + if (ck >= 4){ + stack++; + } + } + } From 0d6a99ad664c52a55ae640261bd4a0464d02add4 Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 24 Mar 2026 20:54:28 +0900 Subject: [PATCH 07/16] feat:car-tostring and Exception check --- 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 9943160..11311c5 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -10,6 +10,7 @@ public class Car { private int stack; public Car(String name) { + if (name.isBlank()) throw new IllegalArgumentException(); this.name = name; } @@ -31,4 +32,8 @@ public void action(){ } } + @Override + public String toString() { + return name+" : "+ "-".repeat(stack); + } } From 95ad598eb111279b6995ca0573e59a6b593f8815 Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 24 Mar 2026 20:55:49 +0900 Subject: [PATCH 08/16] feat-create-Race and initial setting --- src/main/java/racingcar/Race.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/main/java/racingcar/Race.java b/src/main/java/racingcar/Race.java index 9de0578..84555af 100644 --- a/src/main/java/racingcar/Race.java +++ b/src/main/java/racingcar/Race.java @@ -1,4 +1,31 @@ package racingcar; +import camp.nextstep.edu.missionutils.Console; +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; +import java.util.stream.Collectors; public class Race { + + private List carList; + private int race_Count; + + public Race() { + } + + public void start(){ + initCar(); + initRace(); + } + + private void initRace() { + } + + private void initCar() { + + } + + } From 572fa69a7a9d53b4cd044c85501aa89edcd75922 Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 24 Mar 2026 20:57:13 +0900 Subject: [PATCH 09/16] =?UTF-8?q?feat-initCar-=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=20=EC=9D=B4=EB=A6=84=20=EC=84=A4=EC=A0=95=20=EB=B0=8F?= =?UTF-8?q?=20=EC=97=90=EB=9F=AC=20=EA=B3=B5=EB=B0=B1=EC=9D=B4=20=ED=8F=AC?= =?UTF-8?q?=ED=95=A8=EB=90=98=EC=97=88=EB=8A=94=EC=A7=80,=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5,=EA=B8=B8=EC=9D=B4=20=ED=8F=AC=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Race.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Race.java b/src/main/java/racingcar/Race.java index 84555af..f36bc5a 100644 --- a/src/main/java/racingcar/Race.java +++ b/src/main/java/racingcar/Race.java @@ -24,7 +24,24 @@ private void initRace() { } private void initCar() { - + carList = new ArrayList<>(); + + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)\n"); + String text = camp.nextstep.edu.missionutils.Console.readLine(); + + for(String t : text.trim().split(",")){ + if (!t.equals(t.trim())) throw new IllegalArgumentException("이름에 공백이 포함되었습니다."); + + if (carList.stream().anyMatch(c -> c.getName().equals(t.trim()))){ + throw new IllegalArgumentException(); + } + + if(t.length() > 5){ + throw new IllegalArgumentException("이름의 길이가 잘못되었습니다."); + } + Car car = new Car(t.trim()); + carList.add(car); + } } From 5b0ecad3f506bd207e9aa62915bf12df3b0d1019 Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 24 Mar 2026 20:58:07 +0900 Subject: [PATCH 10/16] =?UTF-8?q?feat-initRace=20=EB=B0=8F=20=EC=88=AB?= =?UTF-8?q?=EC=9E=90=20=EB=B2=94=EC=9C=84=20=EC=97=90=EB=9F=AC=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Race.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/Race.java b/src/main/java/racingcar/Race.java index f36bc5a..561b686 100644 --- a/src/main/java/racingcar/Race.java +++ b/src/main/java/racingcar/Race.java @@ -20,8 +20,6 @@ public void start(){ initRace(); } - private void initRace() { - } private void initCar() { carList = new ArrayList<>(); @@ -43,6 +41,17 @@ private void initCar() { carList.add(car); } } + private void initRace() { + System.out.println("시도할 회수는 몇회인가요?\n"); + race_Count = Integer.parseInt(camp.nextstep.edu.missionutils.Console.readLine()); + if (race_Count <= 0){ + throw new IllegalArgumentException(); + } + raceStart(); + } + + private void raceStart() { + } } From 9670b88f3fff259d25e3731c92300e4764f2d6f2 Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 24 Mar 2026 20:58:43 +0900 Subject: [PATCH 11/16] feat:faceStart --- src/main/java/racingcar/Race.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/racingcar/Race.java b/src/main/java/racingcar/Race.java index 561b686..048122a 100644 --- a/src/main/java/racingcar/Race.java +++ b/src/main/java/racingcar/Race.java @@ -52,6 +52,21 @@ private void initRace() { } private void raceStart() { + System.out.println("실행 결과"); + for (int i = 0; i < race_Count; i++) { + carList.forEach(v -> v.action()); + carList.forEach(v -> System.out.println(v.toString())); + System.out.println(); + } + + int maxStack = carList.stream().mapToInt(f -> f.getStack()).max().getAsInt(); + + String final_victory = carList.stream() + .sorted((e1,e2) -> Integer.compare(e2.getStack(),e1.getStack())) + .filter(f -> f.getStack() == maxStack) + .map(Car::getName).collect(Collectors.joining(", ")); + + System.out.println("최종 우승자 : " + final_victory); } } From e39b0adafa92ddc4abce0aee537540d5db4f9d3b Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 31 Mar 2026 19:12:50 +0900 Subject: [PATCH 12/16] =?UTF-8?q?refactor:=20Race=EC=97=90=EC=84=9C=20Car?= =?UTF-8?q?=EC=99=80=20=EA=B4=80=EB=A0=A8=EB=90=9C=20=EC=97=90=EB=9F=AC?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=BD=94=EB=93=9C=EB=93=A4=20Car=EC=97=90?= =?UTF-8?q?=EA=B2=8C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 11311c5..9c519d4 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -10,7 +10,9 @@ public class Car { private int stack; public Car(String name) { - if (name.isBlank()) throw new IllegalArgumentException(); + if (name.length() > 5) throw new IllegalArgumentException("길이"); + if (!name.equals(name.trim())) throw new IllegalArgumentException("이름에 공백이 포함되었습니다."); + if (name.isBlank()) throw new IllegalArgumentException("빈칸"); this.name = name; } @@ -26,8 +28,7 @@ public int getStack() { public void action(){ - int ck = Randoms.pickNumberInRange(0,9); - if (ck >= 4){ + if (Randoms.pickNumberInRange(0,9) >= 4){ stack++; } } From 496778f92c06cdb49c5b03c0c70aa07db35cfaaa Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 31 Mar 2026 19:13:48 +0900 Subject: [PATCH 13/16] =?UTF-8?q?refactor:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=B5=9C=EC=A0=81=ED=99=94,=20=EC=BD=94=EB=93=9C=20=EB=8B=A8?= =?UTF-8?q?=EC=B6=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Race.java | 42 +++++++++++++++---------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/src/main/java/racingcar/Race.java b/src/main/java/racingcar/Race.java index 048122a..5b53b6c 100644 --- a/src/main/java/racingcar/Race.java +++ b/src/main/java/racingcar/Race.java @@ -2,9 +2,7 @@ import camp.nextstep.edu.missionutils.Console; import camp.nextstep.edu.missionutils.Randoms; -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; +import java.util.*; import java.util.stream.Collectors; public class Race { @@ -20,29 +18,22 @@ public void start(){ initRace(); } - private void initCar() { carList = new ArrayList<>(); - System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)\n"); - String text = camp.nextstep.edu.missionutils.Console.readLine(); - - for(String t : text.trim().split(",")){ - if (!t.equals(t.trim())) throw new IllegalArgumentException("이름에 공백이 포함되었습니다."); + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + for(String t : Console.readLine().trim().split(",")){ + Car car = new Car(t); if (carList.stream().anyMatch(c -> c.getName().equals(t.trim()))){ throw new IllegalArgumentException(); } - - if(t.length() > 5){ - throw new IllegalArgumentException("이름의 길이가 잘못되었습니다."); - } - Car car = new Car(t.trim()); carList.add(car); } } + private void initRace() { - System.out.println("시도할 회수는 몇회인가요?\n"); + System.out.println("시도할 회수는 몇회인가요?"); race_Count = Integer.parseInt(camp.nextstep.edu.missionutils.Console.readLine()); if (race_Count <= 0){ @@ -53,18 +44,25 @@ private void initRace() { private void raceStart() { System.out.println("실행 결과"); + for (int i = 0; i < race_Count; i++) { - carList.forEach(v -> v.action()); - carList.forEach(v -> System.out.println(v.toString())); - System.out.println(); + carList.forEach(v -> { + v.action() ; + System.out.println(v.toString()); + }); } - int maxStack = carList.stream().mapToInt(f -> f.getStack()).max().getAsInt(); + int maxStack = carList + .stream() + .mapToInt(f -> f.getStack()) + .max() + .getAsInt(); - String final_victory = carList.stream() - .sorted((e1,e2) -> Integer.compare(e2.getStack(),e1.getStack())) + String final_victory = carList + .stream() .filter(f -> f.getStack() == maxStack) - .map(Car::getName).collect(Collectors.joining(", ")); + .map(Car::getName) + .collect(Collectors.joining(", ")); System.out.println("최종 우승자 : " + final_victory); } From 472f33326397daca6699176671b2fe177527bd10 Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 31 Mar 2026 19:44:23 +0900 Subject: [PATCH 14/16] =?UTF-8?q?style:=20Car=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20=EA=B3=B5=EB=B0=B1=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 9c519d4..0c9fdb0 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -16,17 +16,14 @@ public Car(String name) { this.name = name; } - public String getName() { return name; } - public int getStack() { return stack; } - public void action(){ if (Randoms.pickNumberInRange(0,9) >= 4){ stack++; From 2bc7c23f836a2da0ba034f0ab271454bedd63881 Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 31 Mar 2026 20:10:52 +0900 Subject: [PATCH 15/16] =?UTF-8?q?style:=20Race=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EB=B3=80=EC=88=98=EB=93=A4=20=EC=B9=B4=EB=A9=9C=20?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=8A=A4=20=ED=98=95=ED=83=9C=EB=A1=9C=20?= =?UTF-8?q?=EB=B0=94=EA=BF=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Race.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/racingcar/Race.java b/src/main/java/racingcar/Race.java index 5b53b6c..8d36e8b 100644 --- a/src/main/java/racingcar/Race.java +++ b/src/main/java/racingcar/Race.java @@ -8,7 +8,7 @@ public class Race { private List carList; - private int race_Count; + private int raceCount; public Race() { } @@ -35,8 +35,8 @@ private void initCar() { private void initRace() { System.out.println("시도할 회수는 몇회인가요?"); - race_Count = Integer.parseInt(camp.nextstep.edu.missionutils.Console.readLine()); - if (race_Count <= 0){ + raceCount = Integer.parseInt(camp.nextstep.edu.missionutils.Console.readLine()); + if (raceCount <= 0){ throw new IllegalArgumentException(); } raceStart(); @@ -45,7 +45,7 @@ private void initRace() { private void raceStart() { System.out.println("실행 결과"); - for (int i = 0; i < race_Count; i++) { + for (int i = 0; i < raceCount; i++) { carList.forEach(v -> { v.action() ; System.out.println(v.toString()); @@ -58,13 +58,13 @@ private void raceStart() { .max() .getAsInt(); - String final_victory = carList + String finalVictory = carList .stream() .filter(f -> f.getStack() == maxStack) .map(Car::getName) .collect(Collectors.joining(", ")); - System.out.println("최종 우승자 : " + final_victory); + System.out.println("최종 우승자 : " + finalVictory); } } From ab1bc5041785b57326edc01107ca296643d303a0 Mon Sep 17 00:00:00 2001 From: dnjswldnd-3513 Date: Tue, 31 Mar 2026 20:16:42 +0900 Subject: [PATCH 16/16] =?UTF-8?q?refactor:=20Car=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20=EC=A0=9C?= =?UTF-8?q?=EC=96=B4=20=EB=B0=94=EA=BF=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 0c9fdb0..5dc352a 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -10,9 +10,9 @@ public class Car { private int stack; public Car(String name) { - if (name.length() > 5) throw new IllegalArgumentException("길이"); - if (!name.equals(name.trim())) throw new IllegalArgumentException("이름에 공백이 포함되었습니다."); if (name.isBlank()) throw new IllegalArgumentException("빈칸"); + if (name.length() > 5) throw new IllegalArgumentException("길이"); + if (name.contains(" ")) throw new IllegalArgumentException("이름에 공백이 포함되었습니다."); this.name = name; }