From 8e0ef747dabc7a115b9fffd81d614fe5a2f5ac45 Mon Sep 17 00:00:00 2001 From: wjdtk Date: Sun, 11 Aug 2024 14:48:36 +0900 Subject: [PATCH 1/9] =?UTF-8?q?feat.=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EB=8D=A7=EC=85=88=20=EA=B3=84=EC=82=B0=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/StringAddCalculator.java | 51 ++++++++++++++++++++++ src/test/java/StringAddCalculatorTest.java | 45 +++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 src/main/java/StringAddCalculator.java create mode 100644 src/test/java/StringAddCalculatorTest.java diff --git a/src/main/java/StringAddCalculator.java b/src/main/java/StringAddCalculator.java new file mode 100644 index 000000000..64fcc30c7 --- /dev/null +++ b/src/main/java/StringAddCalculator.java @@ -0,0 +1,51 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +public class StringAddCalculator { + public static int splitAndSum(String s) { + String[] tokens = new String[0]; + if(isNull(s)) return 0; + + Matcher m = Pattern.compile("//(.)\n(.*)").matcher(s); + // 지정된 구분자가 있을 경우 + if(m.find()) { + String customDelimiter = m.group(1); + tokens= m.group(2).split(customDelimiter); + } + + // 구분자가 , 또는 : 일 경우 + if(!m.find() && s.contains(",") || s.contains(":")) { + tokens = s.split(",|:"); + } + + // 숫자만 들어올 경우 + if(tokens.length == 0){ + return Integer.parseInt(s); + } + + List numList = arrayToList(tokens); + if(!isIntegerNegative(numList)) throw new RuntimeException(); + + return sum(numList); + } + public static List arrayToList(String[] tokens) { + return Arrays.stream(tokens).sorted().collect(Collectors.toList()); + } + public static int sum(List numList) { + return numList.stream() + .mapToInt(Integer::parseInt).sum(); + } + public static boolean isNull(String text) { + return (text == null) || (text.isEmpty()); + } + public static boolean isIntegerNegative(List strings) { + for (String string : strings) { + if ((Integer.parseInt(string) < 0)) return false; + } + return true; + } +} diff --git a/src/test/java/StringAddCalculatorTest.java b/src/test/java/StringAddCalculatorTest.java new file mode 100644 index 000000000..a0fb53116 --- /dev/null +++ b/src/test/java/StringAddCalculatorTest.java @@ -0,0 +1,45 @@ +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class StringAddCalculatorTest { + @Test + public void splitAndSum_null_또는_빈문자() { + int result = StringAddCalculator.splitAndSum(null); + assertThat(result).isEqualTo(0); + + result = StringAddCalculator.splitAndSum(""); + assertThat(result).isEqualTo(0); + } + + @Test + public void splitAndSum_숫자하나() throws Exception { + int result = StringAddCalculator.splitAndSum("1"); + assertThat(result).isEqualTo(1); + } + + @Test + public void splitAndSum_쉼표구분자() throws Exception { + int result = StringAddCalculator.splitAndSum("1,2"); + assertThat(result).isEqualTo(3); + } + + @Test + public void splitAndSum_쉼표_또는_콜론_구분자() throws Exception { + int result = StringAddCalculator.splitAndSum("1,2:3"); + assertThat(result).isEqualTo(6); + } + + @Test + public void splitAndSum_custom_구분자() throws Exception { + int result = StringAddCalculator.splitAndSum("//;\n1;2;3"); + assertThat(result).isEqualTo(6); + } + + @Test + public void splitAndSum_negative() throws Exception { + assertThatThrownBy(() -> StringAddCalculator.splitAndSum("-1,2,3")) + .isInstanceOf(RuntimeException.class); + } +} \ No newline at end of file From 62e924697022a2f8f50bcef7670807968065c7be Mon Sep 17 00:00:00 2001 From: wjdtk Date: Wed, 14 Aug 2024 11:21:42 +0900 Subject: [PATCH 2/9] =?UTF-8?q?fix.intendt=20depth=EB=A5=BC=201=EC=9D=B4?= =?UTF-8?q?=ED=95=98=EA=B0=80=20=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/StringAddCalculator.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/StringAddCalculator.java b/src/main/java/StringAddCalculator.java index 64fcc30c7..391f5d913 100644 --- a/src/main/java/StringAddCalculator.java +++ b/src/main/java/StringAddCalculator.java @@ -1,4 +1,3 @@ -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; @@ -28,7 +27,7 @@ public static int splitAndSum(String s) { } List numList = arrayToList(tokens); - if(!isIntegerNegative(numList)) throw new RuntimeException(); + if(containsNegative(numList)) throw new RuntimeException(); return sum(numList); } @@ -42,10 +41,14 @@ public static int sum(List numList) { public static boolean isNull(String text) { return (text == null) || (text.isEmpty()); } - public static boolean isIntegerNegative(List strings) { - for (String string : strings) { - if ((Integer.parseInt(string) < 0)) return false; - } - return true; + // 메인 메소드 + public static boolean containsNegative(List list) { + return list.stream().mapToInt(Integer::parseInt).anyMatch(StringAddCalculator::isNegative); + } + + // 음수인지 판별하는 메소드 + private static boolean isNegative(int number) { + return number < 0; } + } From d74493f80eedfd84bddd691352bd3e745b9cd5d9 Mon Sep 17 00:00:00 2001 From: wjdtk Date: Wed, 14 Aug 2024 12:40:45 +0900 Subject: [PATCH 3/9] =?UTF-8?q?feat.=20README=20-=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.md b/README.md index 8fe711203..40e06fad6 100644 --- a/README.md +++ b/README.md @@ -24,3 +24,20 @@ git checkout main // 기본 브랜치가 main인 경우 git checkout -b 브랜치이름 ex) git checkout -b apply-feedback ``` + +4. 기능 요구 사항 +```jsx +- 3 대의 자동차의 이름을 입력받는다.(5자를 초과할 수 없다) +- 경주 레이스의 횟수를 입력받는다. +- 자동차마다 0에서 9 사이 랜덤 숫자를 저장할 변수를 갖는다. + +(경주 시작) +- 매 횟수마다 자동차의 random 값이 갱신 +- 4이상일 경우 전진 + +(경주 종료) +- 마지막에 가장 많이 전진한 자동차가 우승했음을 알려준다. +- 우승자는 한명 이상일 수 있다. + + +``` From 960c452c6040839a64c76760f057775c729928f6 Mon Sep 17 00:00:00 2001 From: wjdtk Date: Wed, 14 Aug 2024 13:07:30 +0900 Subject: [PATCH 4/9] =?UTF-8?q?feat.=20=EC=9E=90=EB=8F=99=EC=B0=A8?= =?UTF-8?q?=EB=A7=88=EB=8B=A4=20=EB=9E=9C=EB=8D=A4=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/car_racing/Car.java | 21 +++++++++++++++++++++ src/test/java/car_racing/CarTest.java | 19 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/main/java/car_racing/Car.java create mode 100644 src/test/java/car_racing/CarTest.java diff --git a/src/main/java/car_racing/Car.java b/src/main/java/car_racing/Car.java new file mode 100644 index 000000000..8eaa3a795 --- /dev/null +++ b/src/main/java/car_racing/Car.java @@ -0,0 +1,21 @@ +package car_racing; + +import java.util.Random; + +public class Car { + private final String name; + private final int randomNum; + + public Car(String name) { + this.name = name; + this.randomNum = makeRandomNum(); + } + public int makeRandomNum() { + Random random = new Random(); + return random.nextInt(9)+1; // 1~9 + } + public int getRandomNum() { + return this.randomNum; + } + +} diff --git a/src/test/java/car_racing/CarTest.java b/src/test/java/car_racing/CarTest.java new file mode 100644 index 000000000..2ac9b1c09 --- /dev/null +++ b/src/test/java/car_racing/CarTest.java @@ -0,0 +1,19 @@ +package car_racing; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class CarTest { + @Test + @DisplayName("자동차마다 갖게될 랜덤숫자 생성") + void car_randomNum() { + Car car1 = new Car("pobi"); + Car car2 = new Car("crong"); + + assertThat(car1.getRandomNum()).isNotZero(); + assertThat(car2.getRandomNum()).isNotZero(); + } + +} \ No newline at end of file From e07c9ed6ad3801e49f9a6c32a55747555651f08d Mon Sep 17 00:00:00 2001 From: wjdtk Date: Wed, 14 Aug 2024 13:19:29 +0900 Subject: [PATCH 5/9] =?UTF-8?q?feat.=20=EB=9E=9C=EB=8D=A4=EC=88=AB?= =?UTF-8?q?=EC=9E=90=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=20=EC=A0=90=EC=88=98=EC=97=90=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/car_racing/Car.java | 6 ++++++ src/test/java/car_racing/CarTest.java | 16 +++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/car_racing/Car.java b/src/main/java/car_racing/Car.java index 8eaa3a795..997fbcdbf 100644 --- a/src/main/java/car_racing/Car.java +++ b/src/main/java/car_racing/Car.java @@ -5,15 +5,21 @@ public class Car { private final String name; private final int randomNum; + private final int raceScore; public Car(String name) { this.name = name; this.randomNum = makeRandomNum(); + this.raceScore = 0; } public int makeRandomNum() { Random random = new Random(); return random.nextInt(9)+1; // 1~9 } + public int getCurrentScore(int randomNum, int raceScore) { + if(randomNum >= 4) raceScore++; + return raceScore; + } public int getRandomNum() { return this.randomNum; } diff --git a/src/test/java/car_racing/CarTest.java b/src/test/java/car_racing/CarTest.java index 2ac9b1c09..786a6560a 100644 --- a/src/test/java/car_racing/CarTest.java +++ b/src/test/java/car_racing/CarTest.java @@ -1,19 +1,29 @@ package car_racing; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; class CarTest { + Car car1, car2; + @BeforeEach + void setUp() { + car1 = new Car("pobi"); + car2 = new Car("crong"); + } @Test @DisplayName("자동차마다 갖게될 랜덤숫자 생성") void car_randomNum() { - Car car1 = new Car("pobi"); - Car car2 = new Car("crong"); - assertThat(car1.getRandomNum()).isNotZero(); assertThat(car2.getRandomNum()).isNotZero(); } + @Test + @DisplayName("자동차의 랜덤숫자가 4 이상일 때 점수에 축적") + void car_addScore() { + assertThat(car1.getCurrentScore(2, 0)).isEqualTo(0); + assertThat(car2.getCurrentScore(4,2)).isEqualTo(3); + } } \ No newline at end of file From 703b1d127c02678b626bedfae7cb39cab43b9d9e Mon Sep 17 00:00:00 2001 From: wjdtk Date: Wed, 14 Aug 2024 17:45:19 +0900 Subject: [PATCH 6/9] =?UTF-8?q?feat.=20List=EB=A5=BC=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=A1=9C=20=ED=8F=AC=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - play() 메소드 한 번 실행할 때, 1회 자동차 경주가 진행 --- src/main/java/car_racing/Car.java | 3 +++ src/main/java/car_racing/Cars.java | 28 +++++++++++++++++++++++ src/test/java/car_racing/CarsTest.java | 31 ++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 src/main/java/car_racing/Cars.java create mode 100644 src/test/java/car_racing/CarsTest.java diff --git a/src/main/java/car_racing/Car.java b/src/main/java/car_racing/Car.java index 997fbcdbf..6717d723a 100644 --- a/src/main/java/car_racing/Car.java +++ b/src/main/java/car_racing/Car.java @@ -23,5 +23,8 @@ public int getCurrentScore(int randomNum, int raceScore) { public int getRandomNum() { return this.randomNum; } + public int getRaceScore() { + return raceScore; + } } diff --git a/src/main/java/car_racing/Cars.java b/src/main/java/car_racing/Cars.java new file mode 100644 index 000000000..eef29418c --- /dev/null +++ b/src/main/java/car_racing/Cars.java @@ -0,0 +1,28 @@ +package car_racing; + +import java.util.ArrayList; +import java.util.List; + +public class Cars { + private List cars; + + public Cars(String[] carsName) { + this.cars = getCars(carsName); + } + + private List getCars(String[] carsName) { + List cars = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + cars.add(new Car(carsName[0])); + } + return cars; + } + public List play() { + for (Car c: + cars) { + c.getCurrentScore(c.makeRandomNum(), c.getRaceScore()); + } + return cars; + } + +} diff --git a/src/test/java/car_racing/CarsTest.java b/src/test/java/car_racing/CarsTest.java new file mode 100644 index 000000000..19f75fa89 --- /dev/null +++ b/src/test/java/car_racing/CarsTest.java @@ -0,0 +1,31 @@ +package car_racing; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class CarsTest { + Car car1, car2, car3; + @BeforeEach + void setup(){ + car1 = new Car("pobi"); + car2 = new Car("crong"); + car3 = new Car("honux"); + } + + @Test + @DisplayName("1번 경주를 진행할 때 모두 0 또는 1") + void car_racing() { + String[] names = {"pobi", "crong", "honux"}; + Cars cars = new Cars(names); + List carResult = cars.play(); + assertThat(carResult.get(0).getRaceScore()).isLessThanOrEqualTo(1); // 1이하 + assertThat(carResult.get(1).getRaceScore()).isLessThanOrEqualTo(1); // 1이하 + assertThat(carResult.get(2).getRaceScore()).isLessThanOrEqualTo(1); // 1이하 + } + +} \ No newline at end of file From e353a27d1d5930ff931183d7c3e0ee6d728c068a Mon Sep 17 00:00:00 2001 From: wjdtk Date: Wed, 14 Aug 2024 19:22:33 +0900 Subject: [PATCH 7/9] =?UTF-8?q?feat.=20(=EA=B2=BD=EC=A3=BC=20=EC=8B=9C?= =?UTF-8?q?=EC=9E=91)=20=EA=B0=81=20=EC=9E=90=EB=8F=99=EC=B0=A8=EC=9D=98?= =?UTF-8?q?=20=EB=9E=9C=EB=8D=A4=20=EA=B0=92=EC=9D=B4=204=EC=9D=B4?= =?UTF-8?q?=EC=83=81=EC=9D=B4=EB=A9=B4=20=20=ED=95=B4=EB=8B=B9=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=B0=A8=EC=9D=98=20racing=20score=201=20=EC=A6=9D?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/car_racing/Car.java | 15 +++++++++++---- src/main/java/car_racing/Cars.java | 14 +++++++++++--- src/test/java/car_racing/CarTest.java | 7 +++++-- src/test/java/car_racing/CarsTest.java | 13 ++++++++----- 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/main/java/car_racing/Car.java b/src/main/java/car_racing/Car.java index 6717d723a..ac4cbec28 100644 --- a/src/main/java/car_racing/Car.java +++ b/src/main/java/car_racing/Car.java @@ -5,26 +5,33 @@ public class Car { private final String name; private final int randomNum; - private final int raceScore; + private int raceScore; public Car(String name) { this.name = name; this.randomNum = makeRandomNum(); this.raceScore = 0; } + + public static String[] splitCarNames(String str) { + return str.split(","); + } public int makeRandomNum() { Random random = new Random(); return random.nextInt(9)+1; // 1~9 } - public int getCurrentScore(int randomNum, int raceScore) { + public void addScore(int randomNum, int raceScore) { if(randomNum >= 4) raceScore++; - return raceScore; + this.raceScore = raceScore; } public int getRandomNum() { return this.randomNum; } public int getRaceScore() { - return raceScore; + return this.raceScore; + } + public String getName() { + return name; } } diff --git a/src/main/java/car_racing/Cars.java b/src/main/java/car_racing/Cars.java index eef29418c..2cab4b632 100644 --- a/src/main/java/car_racing/Cars.java +++ b/src/main/java/car_racing/Cars.java @@ -4,7 +4,7 @@ import java.util.List; public class Cars { - private List cars; + private final List cars; public Cars(String[] carsName) { this.cars = getCars(carsName); @@ -13,16 +13,24 @@ public Cars(String[] carsName) { private List getCars(String[] carsName) { List cars = new ArrayList<>(); for (int i = 0; i < 3; i++) { - cars.add(new Car(carsName[0])); + cars.add(new Car(carsName[i])); } return cars; } public List play() { for (Car c: cars) { - c.getCurrentScore(c.makeRandomNum(), c.getRaceScore()); + c.addScore(c.makeRandomNum(), c.getRaceScore()); } return cars; } + // 매 회차마다 문자열 출력 + public PrintResult printCurrent(List cars) { + PrintResult result = new PrintResult(cars); + for (Car c: cars) { + result.writeCurrentResult(c); + }System.out.println(); + return result; + } } diff --git a/src/test/java/car_racing/CarTest.java b/src/test/java/car_racing/CarTest.java index 786a6560a..9a44b2779 100644 --- a/src/test/java/car_racing/CarTest.java +++ b/src/test/java/car_racing/CarTest.java @@ -22,8 +22,11 @@ void car_randomNum() { @Test @DisplayName("자동차의 랜덤숫자가 4 이상일 때 점수에 축적") void car_addScore() { - assertThat(car1.getCurrentScore(2, 0)).isEqualTo(0); - assertThat(car2.getCurrentScore(4,2)).isEqualTo(3); + car1.addScore(2, 0); + car2.addScore(4,2); + assertThat(car1.getRaceScore()).isEqualTo(0); + assertThat(car2.getRaceScore()).isEqualTo(3); } + } \ No newline at end of file diff --git a/src/test/java/car_racing/CarsTest.java b/src/test/java/car_racing/CarsTest.java index 19f75fa89..c3ca3842a 100644 --- a/src/test/java/car_racing/CarsTest.java +++ b/src/test/java/car_racing/CarsTest.java @@ -18,14 +18,17 @@ void setup(){ } @Test - @DisplayName("1번 경주를 진행할 때 모두 0 또는 1") + @DisplayName("3번를 진행할 때 가질 수 있는 max값은 회차 수와 같다") void car_racing() { String[] names = {"pobi", "crong", "honux"}; Cars cars = new Cars(names); - List carResult = cars.play(); - assertThat(carResult.get(0).getRaceScore()).isLessThanOrEqualTo(1); // 1이하 - assertThat(carResult.get(1).getRaceScore()).isLessThanOrEqualTo(1); // 1이하 - assertThat(carResult.get(2).getRaceScore()).isLessThanOrEqualTo(1); // 1이하 + for (int i = 1; i <= 3; i++) { + List carResult = cars.play(); // 1~3회 진행 + assertThat(carResult.get(0).getRaceScore()).isLessThanOrEqualTo(i); // i이하 + assertThat(carResult.get(1).getRaceScore()).isLessThanOrEqualTo(i); // i이하 + assertThat(carResult.get(2).getRaceScore()).isLessThanOrEqualTo(i); // i이하 + } + } } \ No newline at end of file From 8ad4c7c2a9d963cb42fa8a756f84bb3c96d44a35 Mon Sep 17 00:00:00 2001 From: wjdtk Date: Wed, 14 Aug 2024 19:23:54 +0900 Subject: [PATCH 8/9] =?UTF-8?q?feat.=20(=EA=B2=BD=EC=A3=BC=20=EC=A2=85?= =?UTF-8?q?=EB=A3=8C)=20=EB=A7=88=EC=A7=80=EB=A7=89=EC=97=90=20=EA=B0=80?= =?UTF-8?q?=EC=9E=A5=20=EB=A7=8E=EC=9D=B4=20=EC=A0=84=EC=A7=84=ED=95=9C=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=EC=B0=A8=EB=A5=BC=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 우승자는 한명 이상일 수 있다. --- src/main/java/car_racing/CarRacing.java | 35 ++++++++++++++ src/main/java/car_racing/PrintResult.java | 57 +++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 src/main/java/car_racing/CarRacing.java create mode 100644 src/main/java/car_racing/PrintResult.java diff --git a/src/main/java/car_racing/CarRacing.java b/src/main/java/car_racing/CarRacing.java new file mode 100644 index 000000000..64f74192d --- /dev/null +++ b/src/main/java/car_racing/CarRacing.java @@ -0,0 +1,35 @@ +package car_racing; + +import java.util.Scanner; + +import static car_racing.Car.splitCarNames; + +public class CarRacing { + public void racing() { + Scanner sc = new Scanner(System.in); + System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."); + String carNames = sc.nextLine(); + Cars cars = new Cars(splitCarNames(carNames)); + + + System.out.println("시도할 회수는 몇회인가요?"); + int racingNum = sc.nextInt(); + + System.out.println("실행결과"); + PrintResult current = null; + while (racingNum > 0) { + current = cars.printCurrent(cars.play()); + racingNum--; + } + + if(current != null) current.finalResult(current.findHighestScore()); + + } + public CarRacing() { + racing(); + } + + public static void main(String[] args){ + new CarRacing(); + } +} diff --git a/src/main/java/car_racing/PrintResult.java b/src/main/java/car_racing/PrintResult.java new file mode 100644 index 000000000..dc056ff95 --- /dev/null +++ b/src/main/java/car_racing/PrintResult.java @@ -0,0 +1,57 @@ +package car_racing; + +import java.util.Collections; +import java.util.List; +import java.util.OptionalInt; +import java.util.stream.Collectors; + +public class PrintResult { + + private final List result; + public PrintResult(List result) { + this.result = result; + } + public void writeCurrentResult(Car car){ + StringBuilder sb = new StringBuilder(); + sb.append(car.getName()).append(" : "); + for (int i = 0; i < car.getRaceScore(); i++) { + sb.append("-"); + } + System.out.println(sb); + } + + // 최대값 찾기 + public List findHighestScore() { + OptionalInt maxScore = result.stream() + .mapToInt(Car::getRaceScore) + .max(); + + return maxScore.isPresent() ? + result.stream() + .filter(car -> car.getRaceScore() == maxScore.getAsInt()) + .collect(Collectors.toList()) + : Collections.emptyList(); // 최대값이 없으면 빈 리스트 반환 + } + public void finalResult(List result) { + if (result.isEmpty()) { + return; + } + String resultString = getResultString(result); + System.out.println(resultString + "가 최종 우승했습니다."); + } + + private String getResultString(List result) { + StringBuilder sb = new StringBuilder(); + + for (Car car : result) { + sb.append(car.getName()).append(", "); + } + + // 마지막 ", " 제거 + int length = sb.length(); + if (length > 0) sb.delete(length - 2, length); + + return sb.toString(); + } + +} From 1e77e129f4580dc013cabfc728e20ed574746ca9 Mon Sep 17 00:00:00 2001 From: wjdtk Date: Wed, 14 Aug 2024 19:43:51 +0900 Subject: [PATCH 9/9] =?UTF-8?q?refactor.=20=EB=A9=94=EC=86=8C=EB=93=9C=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98,=20=ED=95=84=EB=93=9C=EB=AA=85=20=EC=9A=A9?= =?UTF-8?q?=EB=8F=84=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/car_racing/CarRacing.java | 6 +++--- src/main/java/car_racing/Cars.java | 15 +++++++++++++++ src/main/java/car_racing/PrintResult.java | 12 ------------ src/test/java/car_racing/CarsTest.java | 11 +++++++++++ 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/main/java/car_racing/CarRacing.java b/src/main/java/car_racing/CarRacing.java index 64f74192d..65f6884a3 100644 --- a/src/main/java/car_racing/CarRacing.java +++ b/src/main/java/car_racing/CarRacing.java @@ -16,13 +16,13 @@ public void racing() { int racingNum = sc.nextInt(); System.out.println("실행결과"); - PrintResult current = null; + PrintResult print = null; while (racingNum > 0) { - current = cars.printCurrent(cars.play()); + print = cars.printCurrent(cars.play()); racingNum--; } - if(current != null) current.finalResult(current.findHighestScore()); + if(print != null) print.finalResult(cars.findHighestScore()); } public CarRacing() { diff --git a/src/main/java/car_racing/Cars.java b/src/main/java/car_racing/Cars.java index 2cab4b632..f27705a5e 100644 --- a/src/main/java/car_racing/Cars.java +++ b/src/main/java/car_racing/Cars.java @@ -1,7 +1,10 @@ package car_racing; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.OptionalInt; +import java.util.stream.Collectors; public class Cars { private final List cars; @@ -32,5 +35,17 @@ public PrintResult printCurrent(List cars) { }System.out.println(); return result; } + // 최대값 찾기 + public List findHighestScore() { + OptionalInt maxScore = cars.stream() + .mapToInt(Car::getRaceScore) + .max(); + + return maxScore.isPresent() ? + cars.stream() + .filter(car -> car.getRaceScore() == maxScore.getAsInt()) + .collect(Collectors.toList()) + : Collections.emptyList(); // 최대값이 없으면 빈 리스트 반환 + } } diff --git a/src/main/java/car_racing/PrintResult.java b/src/main/java/car_racing/PrintResult.java index dc056ff95..1f53efbf0 100644 --- a/src/main/java/car_racing/PrintResult.java +++ b/src/main/java/car_racing/PrintResult.java @@ -20,18 +20,6 @@ public void writeCurrentResult(Car car){ System.out.println(sb); } - // 최대값 찾기 - public List findHighestScore() { - OptionalInt maxScore = result.stream() - .mapToInt(Car::getRaceScore) - .max(); - - return maxScore.isPresent() ? - result.stream() - .filter(car -> car.getRaceScore() == maxScore.getAsInt()) - .collect(Collectors.toList()) - : Collections.emptyList(); // 최대값이 없으면 빈 리스트 반환 - } public void finalResult(List result) { if (result.isEmpty()) { return; diff --git a/src/test/java/car_racing/CarsTest.java b/src/test/java/car_racing/CarsTest.java index c3ca3842a..fcc61653d 100644 --- a/src/test/java/car_racing/CarsTest.java +++ b/src/test/java/car_racing/CarsTest.java @@ -31,4 +31,15 @@ void car_racing() { } + @Test + @DisplayName(("종료 후 가장 높은 raceScore 을 보유한 List 출력 - 무조건 1개 이상")) + void find_highestScore() { + String[] names = {"pobi", "crong", "honux"}; + Cars cars = new Cars(names); + for (int i = 1; i <= 3; i++) { + cars.play(); // 3회 진행 + } + assertThat(cars.findHighestScore()).isNotNull(); + } + } \ No newline at end of file