From aa22e3aef1ec96397309585ee9eb572d7826999d Mon Sep 17 00:00:00 2001 From: sukeun1997 Date: Wed, 29 Sep 2021 20:34:31 +0900 Subject: [PATCH 1/8] =?UTF-8?q?feat(=EB=AC=B8=EC=9E=90=EC=97=B4=EA=B3=84?= =?UTF-8?q?=EC=82=B0=EA=B8=B0)=20:=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=EA=B8=B0=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=8A=A4=20all=20=ED=86=B5=EA=B3=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/StringAddCalculator.java | 2 + src/test/java/StringAddCalculatorTest.java | 45 ++++++++++++++++++++++ 2 files changed, 47 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..2bbd3da7f --- /dev/null +++ b/src/main/java/StringAddCalculator.java @@ -0,0 +1,2 @@ +package PACKAGE_NAME;public class StringAddCalculator { +} 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 f2793e4c7c0f0cddd0afccb9daa651cb511096d5 Mon Sep 17 00:00:00 2001 From: sukeun1997 Date: Thu, 30 Sep 2021 16:04:29 +0900 Subject: [PATCH 2/8] =?UTF-8?q?feat(=EB=A0=88=EC=9D=B4=EC=8B=B1=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84)=20:=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20,=20=EC=9D=B4=EB=A6=84=205=EA=B8=80?= =?UTF-8?q?=EC=9E=90=20=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racing/Car.java | 2 ++ src/main/java/racing/Cars.java | 2 ++ src/main/java/racing/Create.java | 2 ++ src/main/java/racing/Validation.java | 2 ++ src/test/java/racing/CarTest.java | 2 ++ src/test/java/racing/ValidationCheck.java | 14 ++++++++++++++ 6 files changed, 24 insertions(+) create mode 100644 src/main/java/racing/Car.java create mode 100644 src/main/java/racing/Cars.java create mode 100644 src/main/java/racing/Create.java create mode 100644 src/main/java/racing/Validation.java create mode 100644 src/test/java/racing/CarTest.java create mode 100644 src/test/java/racing/ValidationCheck.java diff --git a/src/main/java/racing/Car.java b/src/main/java/racing/Car.java new file mode 100644 index 000000000..4bd1e6eda --- /dev/null +++ b/src/main/java/racing/Car.java @@ -0,0 +1,2 @@ +package racing;public class Car { +} diff --git a/src/main/java/racing/Cars.java b/src/main/java/racing/Cars.java new file mode 100644 index 000000000..ada664933 --- /dev/null +++ b/src/main/java/racing/Cars.java @@ -0,0 +1,2 @@ +package racing;public class Cars { +} diff --git a/src/main/java/racing/Create.java b/src/main/java/racing/Create.java new file mode 100644 index 000000000..c4b0a84f2 --- /dev/null +++ b/src/main/java/racing/Create.java @@ -0,0 +1,2 @@ +package racing;public class Create { +} diff --git a/src/main/java/racing/Validation.java b/src/main/java/racing/Validation.java new file mode 100644 index 000000000..6c9c7ac83 --- /dev/null +++ b/src/main/java/racing/Validation.java @@ -0,0 +1,2 @@ +package racing;public class Validation { +} diff --git a/src/test/java/racing/CarTest.java b/src/test/java/racing/CarTest.java new file mode 100644 index 000000000..c728983e1 --- /dev/null +++ b/src/test/java/racing/CarTest.java @@ -0,0 +1,2 @@ +package racing;public class CarTest { +} diff --git a/src/test/java/racing/ValidationCheck.java b/src/test/java/racing/ValidationCheck.java new file mode 100644 index 000000000..efe3f291f --- /dev/null +++ b/src/test/java/racing/ValidationCheck.java @@ -0,0 +1,14 @@ +package racing; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class ValidationCheck { + + @Test + void 자동차_이름_5자() { + assertThatThrownBy(() -> Validation.CheckName("abcdef")).isInstanceOf(IllegalArgumentException.class).hasMessage("이름이 6글자 이상입니다") + } +} From 040fb9e1e83a6ddcbe6c9d0767290342d69ed55f Mon Sep 17 00:00:00 2001 From: sukeun1997 Date: Thu, 30 Sep 2021 16:34:42 +0900 Subject: [PATCH 3/8] =?UTF-8?q?feat(=EB=A0=88=EC=9D=B4=EC=8B=B1=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84)=20:=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80?= =?UTF-8?q?=EC=82=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 26 +++++++++++++ build.gradle | 3 +- src/main/java/StringAddCalculator.java | 45 ++++++++++++++++++++++- src/main/java/racing/Car.java | 20 +++++++++- src/main/java/racing/Cars.java | 16 +++++++- src/main/java/racing/Create.java | 11 +++++- src/main/java/racing/Validation.java | 17 ++++++++- src/test/java/racing/CarTest.java | 24 +++++++++++- src/test/java/racing/ValidationCheck.java | 13 +++++-- 9 files changed, 165 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 8fe711203..ccf48a099 100644 --- a/README.md +++ b/README.md @@ -24,3 +24,29 @@ git checkout main // 기본 브랜치가 main인 경우 git checkout -b 브랜치이름 ex) git checkout -b apply-feedback ``` + +[] 자동차 이름,위치 정보를 가지는 객체 생성 - Car +[] 자동차 이름 , 에따라 주어지면 split 해서 Car 객체를 가지는 Cars 그룹 생성 - Cars +[] Validation체크 + []이름 5자 체크 + []null체크 + []isempty체크 + []정상적으로 들어왔는지 체크 + [](,)에 따라 객체 생성 안될시 오류) - Cars +[] 자동차 움직임 구현 0~1 - Car , move +[] 자동차 그룹으로 움직임 구현 0~1 - Cars , move +[] 횟수에 따른 움직임 구현 + [] 횟수가 음수 일시 오류 발생 + +[] 위치 정보에 따른 승자 뽑아내기 + +----- 출력 +[] 자동차 이름 입력하세요 +[] 도할 회수 몇회 +[] 실행 결과 +[] 횟수에 따른 이동 결과 +[] 최종 우승 자동차 + [] 1명, 0명 , 2명이상 +----- 입력 +[ ] 자동차 이름 입력 +[ ] 횟수 입력 diff --git a/build.gradle b/build.gradle index 8172fb73f..1cdbe77ed 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'eclipse' group = 'camp.nextstep' version = '1.0.0' -sourceCompatibility = '1.8' +sourceCompatibility = "11" repositories { mavenCentral() @@ -17,3 +17,4 @@ dependencies { test { useJUnitPlatform() } +targetCompatibility = JavaVersion.VERSION_11 diff --git a/src/main/java/StringAddCalculator.java b/src/main/java/StringAddCalculator.java index 2bbd3da7f..114023014 100644 --- a/src/main/java/StringAddCalculator.java +++ b/src/main/java/StringAddCalculator.java @@ -1,2 +1,45 @@ -package PACKAGE_NAME;public class StringAddCalculator { +import java.util.Arrays; + +public class StringAddCalculator { + public static int splitAndSum(String o) { + if (isNullOrEmpty(o)) return 0; + if(isCustom(o)) return customSplit(o); + if(isOneNumber(o)) return Integer.parseInt(o); + NegativeCheck(SplitNumber(o, ",|:")); + return Sum(SplitNumber(o, ",|:")); + } + + private static String[] SplitNumber(String o, String s) { + return o.split(s); + } + + private static boolean isNullOrEmpty(String o) { + return o == null || o.isEmpty(); + } + + private static boolean isCustom(String o) { + return o.contains("\n"); + } + + private static boolean isOneNumber(String o) { + return o.length() == 1; + } + + private static void NegativeCheck(String[] splitNumber) { + if (isNegative(splitNumber)) throw new RuntimeException(); + } + + private static boolean isNegative(String[] splitNumber) { + return Arrays.stream(splitNumber).mapToInt(a -> Integer.parseInt(a)).anyMatch(t -> t < 0); + } + + private static int customSplit(String o) { + String[] custom = SplitNumber(o.substring(2), "\n"); + NegativeCheck(SplitNumber(custom[1], custom[0])); + return Sum(SplitNumber(custom[1], custom[0])); + } + + private static int Sum(String[] splitNumber) { + return Arrays.stream(splitNumber).mapToInt(a -> Integer.parseInt(a)).sum(); + } } diff --git a/src/main/java/racing/Car.java b/src/main/java/racing/Car.java index 4bd1e6eda..7fef02440 100644 --- a/src/main/java/racing/Car.java +++ b/src/main/java/racing/Car.java @@ -1,2 +1,20 @@ -package racing;public class Car { +package racing; + +public class Car { + private final String name; + private final int location; + + public Car(String name) { + Validation.CheckName(name); + this.name =name; + this.location = 0; + } + + public String getName() { + return name; + } + + public int getLocation() { + return location; + } } diff --git a/src/main/java/racing/Cars.java b/src/main/java/racing/Cars.java index ada664933..4341e5a3c 100644 --- a/src/main/java/racing/Cars.java +++ b/src/main/java/racing/Cars.java @@ -1,2 +1,16 @@ -package racing;public class Cars { +package racing; + +import java.util.Collection; +import java.util.List; + +public class Cars { + private final List carList; + + public Cars(List carList) { + this.carList = carList; + } + + public List getCar() { + return carList; + } } diff --git a/src/main/java/racing/Create.java b/src/main/java/racing/Create.java index c4b0a84f2..2cd4a946e 100644 --- a/src/main/java/racing/Create.java +++ b/src/main/java/racing/Create.java @@ -1,2 +1,11 @@ -package racing;public class Create { +package racing; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class Create { + public static List NewCar(String[] car) { + return Arrays.stream(car).map(a -> new Car(a)).collect(Collectors.toList()); + } } diff --git a/src/main/java/racing/Validation.java b/src/main/java/racing/Validation.java index 6c9c7ac83..d369dad14 100644 --- a/src/main/java/racing/Validation.java +++ b/src/main/java/racing/Validation.java @@ -1,2 +1,17 @@ -package racing;public class Validation { +package racing; + +public class Validation { + + public static final int NAME_SIZE = 6; + + public static void CheckName(String name) { + ValidationName(name == null, "잘못된 이름 입니다 다시 입력 해 주세요"); + ValidationName(name.isEmpty() || name.isBlank(), "잘못된 이름 입니다 다시 입력 해 주세요"); + ValidationName(name.length() >= NAME_SIZE, "이름이 6글자 이상입니다. : "+name); + } + + + private static void ValidationName(boolean b, String s) { + if (b) throw new IllegalArgumentException(s); + } } diff --git a/src/test/java/racing/CarTest.java b/src/test/java/racing/CarTest.java index c728983e1..04a3b7925 100644 --- a/src/test/java/racing/CarTest.java +++ b/src/test/java/racing/CarTest.java @@ -1,2 +1,24 @@ -package racing;public class CarTest { +package racing; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class CarTest { + @Test + void 자동차_객체_생성_확인() { + assertThat((new Car("abc")).getName()).isEqualTo("abc"); + } + + @Test + void 문자열_자동차_객체_생성() { + + String carsName = "a,b,c"; + String[] car = carsName.split(","); + List carList = Create.NewCar(car); + Cars cars = new Cars(carList); + assertThat(cars.getCar().size()).isEqualTo(3); + } } diff --git a/src/test/java/racing/ValidationCheck.java b/src/test/java/racing/ValidationCheck.java index efe3f291f..a88002e05 100644 --- a/src/test/java/racing/ValidationCheck.java +++ b/src/test/java/racing/ValidationCheck.java @@ -2,13 +2,20 @@ import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.*; public class ValidationCheck { @Test void 자동차_이름_5자() { - assertThatThrownBy(() -> Validation.CheckName("abcdef")).isInstanceOf(IllegalArgumentException.class).hasMessage("이름이 6글자 이상입니다") + assertThatCode(() -> Validation.CheckName("abcdef")).isInstanceOf(IllegalArgumentException.class).hasMessageContaining("이름이 6글자 이상입니다"); + assertThatCode(() -> Validation.CheckName("abcd")).doesNotThrowAnyException(); } + + @Test + void 자동차_이름_null_empty_공백_확인() { + assertThatCode(() -> Validation.CheckName(null)).isInstanceOf(IllegalArgumentException.class).hasMessageContaining("잘못된 이름 입니다 다시 입력 해 주세요"); + assertThatCode(() -> Validation.CheckName(" ")).isInstanceOf(IllegalArgumentException.class).hasMessageContaining("잘못된 이름 입니다 다시 입력 해 주세요"); + assertThatCode(() -> Validation.CheckName("")).isInstanceOf(IllegalArgumentException.class).hasMessageContaining("잘못된 이름 입니다 다시 입력 해 주세요"); + a } From 2af987d33ad3f19b96a4ed8c11129286b016c4d0 Mon Sep 17 00:00:00 2001 From: sukeun1997 Date: Thu, 30 Sep 2021 17:06:50 +0900 Subject: [PATCH 4/8] =?UTF-8?q?feat(=EB=A0=88=EC=9D=B4=EC=8B=B1=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84)=20:=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=EC=9B=80=EC=A7=81=EC=9E=84=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racing/LocationCar.java | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 src/main/java/racing/LocationCar.java diff --git a/src/main/java/racing/LocationCar.java b/src/main/java/racing/LocationCar.java new file mode 100644 index 000000000..ebb93754c --- /dev/null +++ b/src/main/java/racing/LocationCar.java @@ -0,0 +1,2 @@ +package racing;public class LocationCar { +} From 3b52662453103992360fa543eea2f74d7c35e6e9 Mon Sep 17 00:00:00 2001 From: sukeun1997 Date: Thu, 30 Sep 2021 17:17:03 +0900 Subject: [PATCH 5/8] =?UTF-8?q?feat(=EB=A0=88=EC=9D=B4=EC=8B=B1=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84)=20:=20=EC=9E=90=EB=8F=99=EC=B0=A8=EA=B7=B8?= =?UTF-8?q?=EB=A3=B9=20=EC=9B=80=EC=A7=81=EC=9E=84=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racing/Car.java | 20 +++++++++-- src/main/java/racing/Cars.java | 4 +++ src/main/java/racing/LocationCar.java | 19 ++++++++++- src/test/java/racing/CarTest.java | 41 +++++++++++++++++++++++ src/test/java/racing/ValidationCheck.java | 2 +- 5 files changed, 81 insertions(+), 5 deletions(-) diff --git a/src/main/java/racing/Car.java b/src/main/java/racing/Car.java index 7fef02440..3b6986b9d 100644 --- a/src/main/java/racing/Car.java +++ b/src/main/java/racing/Car.java @@ -1,13 +1,15 @@ package racing; +import javax.xml.stream.Location; + public class Car { private final String name; - private final int location; + private LocationCar location; public Car(String name) { Validation.CheckName(name); this.name =name; - this.location = 0; + this.location = new LocationCar(0); } public String getName() { @@ -15,6 +17,18 @@ public String getName() { } public int getLocation() { - return location; + return location.distance(); + } + + public void move(int v) { + location = location.move(v); + } + + @Override + public String toString() { + return "Car{" + + "name='" + name + '\'' + + ", location=" + getLocation() + + '}'; } } diff --git a/src/main/java/racing/Cars.java b/src/main/java/racing/Cars.java index 4341e5a3c..604bb0aa3 100644 --- a/src/main/java/racing/Cars.java +++ b/src/main/java/racing/Cars.java @@ -13,4 +13,8 @@ public Cars(List carList) { public List getCar() { return carList; } + + public void move(List carList) { + carList.stream().forEach(car -> car.move((int) Math.round(Math.random()))); + } } diff --git a/src/main/java/racing/LocationCar.java b/src/main/java/racing/LocationCar.java index ebb93754c..8f4cd48b6 100644 --- a/src/main/java/racing/LocationCar.java +++ b/src/main/java/racing/LocationCar.java @@ -1,2 +1,19 @@ -package racing;public class LocationCar { +package racing; + +public class LocationCar { + + + private final int location; + + public LocationCar(int location) { + this.location = location; + } + + public int distance() { + return this.location; + } + + public LocationCar move(int v) { + return new LocationCar(this.location + v); + } } diff --git a/src/test/java/racing/CarTest.java b/src/test/java/racing/CarTest.java index 04a3b7925..c01f2495b 100644 --- a/src/test/java/racing/CarTest.java +++ b/src/test/java/racing/CarTest.java @@ -3,6 +3,7 @@ import org.junit.jupiter.api.Test; import java.util.List; +import java.util.Random; import static org.assertj.core.api.Assertions.assertThat; @@ -21,4 +22,44 @@ public class CarTest { Cars cars = new Cars(carList); assertThat(cars.getCar().size()).isEqualTo(3); } + + @Test + void 자동차_움직임_구현() { + Car car = new Car("test1"); + car.move((int) Math.round(Math.random())); + assertThat(car.getLocation()).isLessThanOrEqualTo(1); + } + + @Test + void 자동차_5번_움직임_구현() { + Car car = new Car("test1"); + for (int i = 0; i <= 5; i++) { + car.move((int) Math.round(Math.random())); + } + System.out.println(car.getLocation()); + assertThat(car.getLocation()).isGreaterThanOrEqualTo(1); + assertThat(car.getLocation()).isLessThanOrEqualTo(5); + } + + @Test + void 자동차_그룹_움직임_구현() { + String carsName = "a,b,c"; + String[] car = carsName.split(","); + List carList = Create.NewCar(car); + Cars cars = new Cars(carList); + cars.move(carList); + cars.getCar().stream().forEach(a -> System.out.println(a.toString())); + } + + @Test + void 자동차_그룹_5번_움직임_구현() { + String carsName = "a,b,c"; + String[] car = carsName.split(","); + List carList = Create.NewCar(car); + Cars cars = new Cars(carList); + for (int i = 0; i <= 5; i++) { + cars.move(carList); + } + cars.getCar().stream().forEach(a -> System.out.println(a.toString())); + } } diff --git a/src/test/java/racing/ValidationCheck.java b/src/test/java/racing/ValidationCheck.java index a88002e05..bc424629e 100644 --- a/src/test/java/racing/ValidationCheck.java +++ b/src/test/java/racing/ValidationCheck.java @@ -17,5 +17,5 @@ public class ValidationCheck { assertThatCode(() -> Validation.CheckName(null)).isInstanceOf(IllegalArgumentException.class).hasMessageContaining("잘못된 이름 입니다 다시 입력 해 주세요"); assertThatCode(() -> Validation.CheckName(" ")).isInstanceOf(IllegalArgumentException.class).hasMessageContaining("잘못된 이름 입니다 다시 입력 해 주세요"); assertThatCode(() -> Validation.CheckName("")).isInstanceOf(IllegalArgumentException.class).hasMessageContaining("잘못된 이름 입니다 다시 입력 해 주세요"); - a + } } From 1ffcbc76f0551642ab8ba6395a5d1b0c6eae4ac9 Mon Sep 17 00:00:00 2001 From: sukeun1997 Date: Thu, 30 Sep 2021 17:39:58 +0900 Subject: [PATCH 6/8] =?UTF-8?q?feat(=EB=A0=88=EC=9D=B4=EC=8B=B1=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84)=20:=20=EC=9E=90=EB=8F=99=EC=B0=A8=EA=B7=B8?= =?UTF-8?q?=EB=A3=B9=20=EC=B5=9C=EB=8C=80=20=EA=B1=B0=EB=A6=AC=20,=20?= =?UTF-8?q?=EC=8A=B9=EC=9E=90=20=EC=9D=B4=EB=A6=84=20=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racing/Cars.java | 13 ++++++++ src/test/java/racing/CarTest.java | 31 ------------------ src/test/java/racing/CarsTest.java | 51 ++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 31 deletions(-) create mode 100644 src/test/java/racing/CarsTest.java diff --git a/src/main/java/racing/Cars.java b/src/main/java/racing/Cars.java index 604bb0aa3..1d454c79b 100644 --- a/src/main/java/racing/Cars.java +++ b/src/main/java/racing/Cars.java @@ -2,6 +2,7 @@ import java.util.Collection; import java.util.List; +import java.util.stream.Collectors; public class Cars { private final List carList; @@ -17,4 +18,16 @@ public List getCar() { public void move(List carList) { carList.stream().forEach(car -> car.move((int) Math.round(Math.random()))); } + + public int Maxdistance() { + return carList.stream().mapToInt(car -> car.getLocation()).max().getAsInt(); + } + + + public List WinName(int distance) { + return carList.stream(). + filter(car -> car.getLocation() == distance). + map(name -> name.getName()). + collect(Collectors.toList()); + } } diff --git a/src/test/java/racing/CarTest.java b/src/test/java/racing/CarTest.java index c01f2495b..4a8d28d40 100644 --- a/src/test/java/racing/CarTest.java +++ b/src/test/java/racing/CarTest.java @@ -13,16 +13,6 @@ public class CarTest { assertThat((new Car("abc")).getName()).isEqualTo("abc"); } - @Test - void 문자열_자동차_객체_생성() { - - String carsName = "a,b,c"; - String[] car = carsName.split(","); - List carList = Create.NewCar(car); - Cars cars = new Cars(carList); - assertThat(cars.getCar().size()).isEqualTo(3); - } - @Test void 자동차_움직임_구현() { Car car = new Car("test1"); @@ -41,25 +31,4 @@ public class CarTest { assertThat(car.getLocation()).isLessThanOrEqualTo(5); } - @Test - void 자동차_그룹_움직임_구현() { - String carsName = "a,b,c"; - String[] car = carsName.split(","); - List carList = Create.NewCar(car); - Cars cars = new Cars(carList); - cars.move(carList); - cars.getCar().stream().forEach(a -> System.out.println(a.toString())); - } - - @Test - void 자동차_그룹_5번_움직임_구현() { - String carsName = "a,b,c"; - String[] car = carsName.split(","); - List carList = Create.NewCar(car); - Cars cars = new Cars(carList); - for (int i = 0; i <= 5; i++) { - cars.move(carList); - } - cars.getCar().stream().forEach(a -> System.out.println(a.toString())); - } } diff --git a/src/test/java/racing/CarsTest.java b/src/test/java/racing/CarsTest.java new file mode 100644 index 000000000..906ab44a2 --- /dev/null +++ b/src/test/java/racing/CarsTest.java @@ -0,0 +1,51 @@ +package racing; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class CarsTest { + + List carList; + Cars cars; + + @BeforeEach + public void setUp() { + String carsName = "a,b,c"; + String[] car = carsName.split(","); + carList = Create.NewCar(car); + cars = new Cars(carList); + } + @Test + void 문자열_자동차_객체_생성() { + assertThat(cars.getCar().size()).isEqualTo(3); + } + + @Test + void 자동차_그룹_움직임_구현() { + cars.move(carList); + cars.getCar().stream().forEach(a -> System.out.println(a.toString())); + } + + @Test + void 자동차_그룹_5번_움직임_구현() { + for (int i = 0; i <= 5; i++) { + cars.move(carList); + } + cars.getCar().stream().forEach(a -> System.out.println(a.toString())); + } + + @Test + void 자동차_승자_확인() { + for (int i = 0; i <= 5; i++) { + cars.move(carList); + } + cars.getCar().stream().forEach(a -> System.out.println(a.toString())); + cars.WinName(cars.Maxdistance()).forEach(System.out::println); + assertThat(cars.WinName(cars.Maxdistance())).hasSizeGreaterThanOrEqualTo(1); + } +} From d4d3dff8ab14485a50419ced72975128273e4d3f Mon Sep 17 00:00:00 2001 From: sukeun1997 Date: Fri, 1 Oct 2021 14:55:00 +0900 Subject: [PATCH 7/8] =?UTF-8?q?feat(=EB=A0=88=EC=9D=B4=EC=8B=B1=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84)=20:=20=20=EC=9E=85=EB=A0=A5=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20=EC=9E=90=EB=8F=99=EC=B0=A8=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20,=20=EC=98=88=EC=99=B8=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=A5=B8=20=EC=9E=AC=EC=8B=9C=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racing/Application.java | 7 +++++ src/main/java/racing/RacingCar.java | 40 +++++++++++++++++++++++++++ src/main/java/racing/Validation.java | 5 ++++ 3 files changed, 52 insertions(+) create mode 100644 src/main/java/racing/Application.java create mode 100644 src/main/java/racing/RacingCar.java diff --git a/src/main/java/racing/Application.java b/src/main/java/racing/Application.java new file mode 100644 index 000000000..d4644bc75 --- /dev/null +++ b/src/main/java/racing/Application.java @@ -0,0 +1,7 @@ +package racing; + +public class Application { + public static void main(String[] args) { + RacingCar.run(); + } +} diff --git a/src/main/java/racing/RacingCar.java b/src/main/java/racing/RacingCar.java new file mode 100644 index 000000000..431d07882 --- /dev/null +++ b/src/main/java/racing/RacingCar.java @@ -0,0 +1,40 @@ +package racing; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.List; + +public class RacingCar { + + public static void run() { + + try { + List carList = Create.NewCar(InputView.start()); + Cars cars = new Cars(carList); + InputView.count(); + + } catch (IOException e) { + e.printStackTrace(); + } catch (IllegalArgumentException illegalArgumentException) { + System.out.println(illegalArgumentException.getMessage()); + run(); + } + } + + private static class InputView { + + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + public static String[] start() throws IOException { + System.out.println("경주할 자동차 이름을 입력하세요 "); + return (br.readLine()).split(","); + } + + public static int count() throws IOException { + System.out.println("시도할 횟수는 몇회 인가요?"); + return Validation.checkNegative(Integer.parseInt(br.readLine())); + } + } + + +} diff --git a/src/main/java/racing/Validation.java b/src/main/java/racing/Validation.java index d369dad14..9c05ff61f 100644 --- a/src/main/java/racing/Validation.java +++ b/src/main/java/racing/Validation.java @@ -14,4 +14,9 @@ public static void CheckName(String name) { private static void ValidationName(boolean b, String s) { if (b) throw new IllegalArgumentException(s); } + + public static int checkNegative(int parseInt) { + if(parseInt < 0) throw new IllegalArgumentException("음수는 입력할 수 없습니다."); + return parseInt; + } } From 563456c0b60ca72bc8f6a4c26b2dba36f054ae16 Mon Sep 17 00:00:00 2001 From: sukeun1997 Date: Fri, 1 Oct 2021 15:28:20 +0900 Subject: [PATCH 8/8] =?UTF-8?q?feat(=EB=A0=88=EC=9D=B4=EC=8B=B1=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84)=20:=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racing/Car.java | 5 +---- src/main/java/racing/LocationCar.java | 9 +++++++++ src/main/java/racing/RacingCar.java | 22 +++++++++++++++++----- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/main/java/racing/Car.java b/src/main/java/racing/Car.java index 3b6986b9d..8e11c2215 100644 --- a/src/main/java/racing/Car.java +++ b/src/main/java/racing/Car.java @@ -26,9 +26,6 @@ public void move(int v) { @Override public String toString() { - return "Car{" + - "name='" + name + '\'' + - ", location=" + getLocation() + - '}'; + return name + ": " + location +'\n'; } } diff --git a/src/main/java/racing/LocationCar.java b/src/main/java/racing/LocationCar.java index 8f4cd48b6..c07a0de43 100644 --- a/src/main/java/racing/LocationCar.java +++ b/src/main/java/racing/LocationCar.java @@ -16,4 +16,13 @@ public int distance() { public LocationCar move(int v) { return new LocationCar(this.location + v); } + + @Override + public String toString() { + String s = ""; + for (int i = 0; i carList = Create.NewCar(InputView.start()); Cars cars = new Cars(carList); - InputView.count(); - + OutPutView.result(cars,InputView.count()); } catch (IOException e) { e.printStackTrace(); + run(); } catch (IllegalArgumentException illegalArgumentException) { System.out.println(illegalArgumentException.getMessage()); run(); @@ -37,4 +35,18 @@ public static int count() throws IOException { } + private static class OutPutView { + static StringBuilder st = new StringBuilder(); + public static void result(Cars cars, int count) { + System.out.println("실행 결과"); + for (int i = 0; i < count; i++) { + cars.move(cars.getCar()); + cars.getCar().stream().forEach(car -> st.append(car.toString())); + st.append("\n"); + } + cars.WinName(cars.Maxdistance()).stream().forEach(car->st.append(car).append(",")); + st.replace(st.length() - 1, st.length(), "가 최종 우승했습니다."); + System.out.println(st); + } + } }