From e1ec75b26bb08a54c8fb2f28c548199be24ffc11 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sat, 8 Jun 2024 22:32:01 +0900 Subject: [PATCH 01/30] =?UTF-8?q?docs(readme)=20:=20README.md=EC=97=90=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 491aece1..f638435f 100644 --- a/README.md +++ b/README.md @@ -1 +1,35 @@ -# java-racingcar-precourse \ No newline at end of file +# java-racingcar-precourse + +# 객체별 기능 목록 + +## 자동차 객체 Car class +[] String name 자동차 이름 저장하는 변수 +[] int state 현재까지 얼만큼 움직였는지 저장하는 변수 +[] move() 움직일지 말지 결정하고 반영하는 메서드 + * 0~9사이 무작위 값 구한후, 무작위 값이 4 이상일 경우 1칸 움직임 + * 실행 결과를 자동차 객체 상태 state 변수에 반영 + + +## 게임 진행 프로그램 Game class +[] getCarName() 자동차 이름 입력받기 기능 + [] 이상치 체크 후 이상한 값인 경우 입력을 다시 받도록함 + +[] getTryNum() 시도 회수 입력받기 기능 + [] 이상치 체크 후 이상한 값인 경우 입력을 다시 받도록함 + +[] printResult() 실행 결과를 출력하는 기능 +[] checkWinner() 경주 종료 후, 최종 우승자를 판별하는 기능 (여러명 일 수 있음) +[] printWinner() 최종 우승자를 출력하는 기능 + + +## 이상치 판별 클래스 CheckInput class +[] 자동차 이름 이상 판별 +[] 시도 회수 이상 판별 + +[] 잘못된 값 입력시 + [] IllegalArgumentException 를 발생시키고, + [] "[ERROR]"로 시작하는 에러 메시지를 출력 + +## 참고 +* 메서드 명은 동사로 시작 +* 메서드명 , 클래스 명이 모호하지 않도록 하기 \ No newline at end of file From 10ed28bdb25ff7a579bd158a1068b9b432626c7e Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sat, 8 Jun 2024 22:37:27 +0900 Subject: [PATCH 02/30] =?UTF-8?q?style(readme)=20:=20README.md=EC=97=90=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20[=20]=20=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 --- README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index f638435f..e0475e9b 100644 --- a/README.md +++ b/README.md @@ -3,32 +3,32 @@ # 객체별 기능 목록 ## 자동차 객체 Car class -[] String name 자동차 이름 저장하는 변수 -[] int state 현재까지 얼만큼 움직였는지 저장하는 변수 -[] move() 움직일지 말지 결정하고 반영하는 메서드 +[ ] String name 자동차 이름 저장하는 변수 +[ ] int state 현재까지 얼만큼 움직였는지 저장하는 변수 +[ ] move() 움직일지 말지 결정하고 반영하는 메서드 * 0~9사이 무작위 값 구한후, 무작위 값이 4 이상일 경우 1칸 움직임 * 실행 결과를 자동차 객체 상태 state 변수에 반영 ## 게임 진행 프로그램 Game class -[] getCarName() 자동차 이름 입력받기 기능 - [] 이상치 체크 후 이상한 값인 경우 입력을 다시 받도록함 +[ ] getCarName() 자동차 이름 입력받기 기능 + [ ] 이상치 체크 후 이상한 값인 경우 입력을 다시 받도록함 -[] getTryNum() 시도 회수 입력받기 기능 - [] 이상치 체크 후 이상한 값인 경우 입력을 다시 받도록함 +[ ] getTryNum() 시도 회수 입력받기 기능 + [ ] 이상치 체크 후 이상한 값인 경우 입력을 다시 받도록함 -[] printResult() 실행 결과를 출력하는 기능 -[] checkWinner() 경주 종료 후, 최종 우승자를 판별하는 기능 (여러명 일 수 있음) -[] printWinner() 최종 우승자를 출력하는 기능 +[ ] printResult() 실행 결과를 출력하는 기능 +[ ] checkWinner() 경주 종료 후, 최종 우승자를 판별하는 기능 (여러명 일 수 있음) +[ ] printWinner() 최종 우승자를 출력하는 기능 ## 이상치 판별 클래스 CheckInput class -[] 자동차 이름 이상 판별 -[] 시도 회수 이상 판별 +[ ] 자동차 이름 이상 판별 +[ ] 시도 회수 이상 판별 -[] 잘못된 값 입력시 - [] IllegalArgumentException 를 발생시키고, - [] "[ERROR]"로 시작하는 에러 메시지를 출력 +[ ] 잘못된 값 입력시 + [ ] IllegalArgumentException 를 발생시키고, + [ ] "[ERROR]"로 시작하는 에러 메시지를 출력 ## 참고 * 메서드 명은 동사로 시작 From ba6ac38d0a1b962bb5652c07b784b0f85aa8c0f0 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sat, 8 Jun 2024 22:41:18 +0900 Subject: [PATCH 03/30] =?UTF-8?q?feat(Car)=20:=20Car=20class=20=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=9E=90=EB=8F=99=EC=B0=A8=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=EC=9D=98=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EC=88=98=20=EB=B0=8F?= =?UTF-8?q?=20getter,=20setter=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/Car.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/main/java/Car.java diff --git a/src/main/java/Car.java b/src/main/java/Car.java new file mode 100644 index 00000000..eb68a71e --- /dev/null +++ b/src/main/java/Car.java @@ -0,0 +1,13 @@ +public class Car { + private String name; + + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name= name; + } +} From 841d9f4a533ad96c1849fbc6b287f9911afa5d04 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sat, 8 Jun 2024 22:44:58 +0900 Subject: [PATCH 04/30] =?UTF-8?q?feat(Car)=20:=20Car=20class=20=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=9E=90=EB=8F=99=EC=B0=A8=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=EC=9D=98=20=ED=98=84=EC=9E=AC=20=EC=9C=84=EC=B9=98=EB=A5=BC=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=ED=95=98=EB=8A=94=20int=20state=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=20=EC=84=A0=EC=96=B8=20=EB=B0=8F=20getter,=20setter?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- src/main/java/Car.java | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e0475e9b..5b846885 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@ # 객체별 기능 목록 ## 자동차 객체 Car class -[ ] String name 자동차 이름 저장하는 변수 -[ ] int state 현재까지 얼만큼 움직였는지 저장하는 변수 +[x] String name 자동차 이름 저장하는 변수 +[x] int state 현재까지 얼만큼 움직였는지 저장하는 변수 [ ] move() 움직일지 말지 결정하고 반영하는 메서드 * 0~9사이 무작위 값 구한후, 무작위 값이 4 이상일 경우 1칸 움직임 * 실행 결과를 자동차 객체 상태 state 변수에 반영 diff --git a/src/main/java/Car.java b/src/main/java/Car.java index eb68a71e..28dd0131 100644 --- a/src/main/java/Car.java +++ b/src/main/java/Car.java @@ -1,6 +1,7 @@ public class Car { private String name; + private int state =0; public String getName() { @@ -10,4 +11,12 @@ public String getName() { public void setName(String name) { this.name= name; } + + public int getState() { + return state; + } + + public void setState(int newState) { + this.state = newState; + } } From 42a2dc4f536650235786d24d1c39ed267d467afc Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sat, 8 Jun 2024 22:49:00 +0900 Subject: [PATCH 05/30] =?UTF-8?q?style(Car)=20:=20Car=20class=20=EC=9D=98?= =?UTF-8?q?=20=EC=97=94=ED=84=B0=ED=82=A4=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/Car.java | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5b846885..5a9bc09e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ## 자동차 객체 Car class [x] String name 자동차 이름 저장하는 변수 [x] int state 현재까지 얼만큼 움직였는지 저장하는 변수 -[ ] move() 움직일지 말지 결정하고 반영하는 메서드 +[x] move() 움직일지 말지 결정하고 반영하는 메서드 * 0~9사이 무작위 값 구한후, 무작위 값이 4 이상일 경우 1칸 움직임 * 실행 결과를 자동차 객체 상태 state 변수에 반영 diff --git a/src/main/java/Car.java b/src/main/java/Car.java index 28dd0131..d33fb180 100644 --- a/src/main/java/Car.java +++ b/src/main/java/Car.java @@ -1,21 +1,28 @@ +import java.util.Random; + public class Car { private String name; - private int state =0; + public void move() { + + Random r = new Random(); + int randNum= r.nextInt(0,9); + + if (randNum >= 4) { + setState(getState() + 1); + } + } public String getName() { return name; } - public void setName(String name) { this.name= name; } - public int getState() { return state; } - public void setState(int newState) { this.state = newState; } From 724de0dcf3714596e2f1c5156db2d4e1177e3ece Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 01:45:51 +0900 Subject: [PATCH 06/30] =?UTF-8?q?docs(Readme)=20:=20Readme=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 --- README.md | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5a9bc09e..02cb8918 100644 --- a/README.md +++ b/README.md @@ -12,14 +12,21 @@ ## 게임 진행 프로그램 Game class [ ] getCarName() 자동차 이름 입력받기 기능 + [ ] 경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분) [ ] 이상치 체크 후 이상한 값인 경우 입력을 다시 받도록함 [ ] getTryNum() 시도 회수 입력받기 기능 + [ ] 시도할 회수는 몇회인가요? [ ] 이상치 체크 후 이상한 값인 경우 입력을 다시 받도록함 [ ] printResult() 실행 결과를 출력하는 기능 + [ ]실행 결과 + pobi : + woni : + jun : [ ] checkWinner() 경주 종료 후, 최종 우승자를 판별하는 기능 (여러명 일 수 있음) [ ] printWinner() 최종 우승자를 출력하는 기능 + [ ] 최종 우승자 : ## 이상치 판별 클래스 CheckInput class @@ -32,4 +39,33 @@ ## 참고 * 메서드 명은 동사로 시작 -* 메서드명 , 클래스 명이 모호하지 않도록 하기 \ No newline at end of file +* 메서드명 , 클래스 명이 모호하지 않도록 하기 + + +## 실행결과 예시 +경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분) +pobi,woni,jun +시도할 회수는 몇회인가요? +5 +실행 결과 +pobi : +woni : +jun : + +pobi : - +woni : +jun : - + +pobi : -- +woni : - +jun : -- + +pobi : --- +woni : -- +jun : --- + +pobi : ---- +woni : --- +jun : ---- + +최종 우승자 : pobi, jun \ No newline at end of file From f845f7965621aa6de750bb2b05a2f09c7672a661 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 02:10:48 +0900 Subject: [PATCH 07/30] =?UTF-8?q?feat(Game)=20:=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=20=EC=9D=B4=EB=A6=84=EC=9D=84=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=EB=A1=9C=EB=B6=80=ED=84=B0=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EB=B0=9B=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Game.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/Game.java diff --git a/src/main/java/Game.java b/src/main/java/Game.java new file mode 100644 index 00000000..656fe031 --- /dev/null +++ b/src/main/java/Game.java @@ -0,0 +1,23 @@ +import java.util.List; +import java.util.Scanner; + +public class Game { + + public List getCarName() { + List carNames; + while (true) { + Scanner sc = new Scanner(System.in); + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + carNames = List.of(sc.nextLine().split(",")); + if (CheckInput.checkCarNames(carNames)) { + sc.close(); + break; + } + } + return carNames; + } + + + + +} From e1c2dd1522724f1f765ed3de93eb3f6c7da0d139 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 02:11:41 +0900 Subject: [PATCH 08/30] =?UTF-8?q?docs(Readme)=20:=20Readme=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 --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 02cb8918..db229ea1 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ ## 게임 진행 프로그램 Game class -[ ] getCarName() 자동차 이름 입력받기 기능 - [ ] 경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분) - [ ] 이상치 체크 후 이상한 값인 경우 입력을 다시 받도록함 +[x] getCarName() 자동차 이름 입력받기 기능 + [x] 경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분) + [x] 이상치 체크 후 이상한 값인 경우 입력을 다시 받도록함 [ ] getTryNum() 시도 회수 입력받기 기능 [ ] 시도할 회수는 몇회인가요? @@ -31,7 +31,9 @@ ## 이상치 판별 클래스 CheckInput class [ ] 자동차 이름 이상 판별 + 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다. [ ] 시도 회수 이상 판별 + 숫자가 아닌경우 이상치 [ ] 잘못된 값 입력시 [ ] IllegalArgumentException 를 발생시키고, From adb3131f3d9e866714b1cc3e504463287caaef61 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 02:20:54 +0900 Subject: [PATCH 09/30] =?UTF-8?q?feat(Game)=20:=20=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=EB=A1=9C=EB=B6=80=ED=84=B0=20=EC=8B=9C=EB=8F=84=20?= =?UTF-8?q?=ED=9A=8C=EC=88=98=20=EC=9E=85=EB=A0=A5=EB=B0=9B=EA=B3=A0=20?= =?UTF-8?q?=EC=9D=B4=EC=83=81=EC=B9=98=20=EC=B2=B4=ED=81=AC=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=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/Game.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/Game.java b/src/main/java/Game.java index 656fe031..6a260a85 100644 --- a/src/main/java/Game.java +++ b/src/main/java/Game.java @@ -5,8 +5,9 @@ public class Game { public List getCarName() { List carNames; + Scanner sc = new Scanner(System.in); + while (true) { - Scanner sc = new Scanner(System.in); System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); carNames = List.of(sc.nextLine().split(",")); if (CheckInput.checkCarNames(carNames)) { @@ -17,6 +18,21 @@ public List getCarName() { return carNames; } + public int getTryNum() { + int tryNum; + Scanner sc = new Scanner(System.in); + while (true) { + System.out.println("시도할 회수는 몇회인가요?"); + try { + tryNum = sc.nextInt(); + break; + } catch (IllegalArgumentException e) { + CheckInput.isWrongValue(); + } + } + return tryNum; + } + From b84a61aa7249fac591baeac1fa40d12b5facecb4 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 02:31:42 +0900 Subject: [PATCH 10/30] =?UTF-8?q?feat(CheckInput)=20:=20=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=B0=A8=20=EC=9D=B4=EB=A6=84=EC=9D=84=20=EB=AA=A8?= =?UTF-8?q?=EC=95=84=EB=91=94=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=EC=9D=98=20?= =?UTF-8?q?=EA=B0=92=EC=9D=B4=20=EC=9C=A0=ED=9A=A8=ED=95=9C=20=EA=B0=92?= =?UTF-8?q?=EC=9D=B8=EC=A7=80=20=ED=99=95=EC=9D=B8=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20(=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=20=EC=9D=B4=EB=A6=84=EC=9D=80=205=EC=9E=90=20?= =?UTF-8?q?=EC=9D=B4=ED=95=98=EB=A7=8C=20=EA=B0=80=EB=8A=A5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/CheckInput.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/CheckInput.java diff --git a/src/main/java/CheckInput.java b/src/main/java/CheckInput.java new file mode 100644 index 00000000..5eb8b26a --- /dev/null +++ b/src/main/java/CheckInput.java @@ -0,0 +1,15 @@ +import java.util.List; + +public class CheckInput { + public static boolean checkCarName(List carNames) { + for (String carName : carNames) { + int carLength = carName.length(); + if ((carLength < 0) || (carLength > 5)) { + CheckInput.isWrongValue(); + return false; + } + } + return true; + } + +} From d102e19e629fbf29745038986aa6b1e4d38faafc Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 02:33:14 +0900 Subject: [PATCH 11/30] =?UTF-8?q?feat(CheckInput)=20:=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=EA=B0=80=20=EC=9E=98=EB=AA=BB=EB=90=9C=20=EA=B0=92?= =?UTF-8?q?=EC=9D=84=20=EC=9E=85=EB=A0=A5=ED=96=88=EC=9D=84=20=EB=95=8C=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=EB=A5=BC=20=EB=B0=9C=EC=83=9D=ED=95=98?= =?UTF-8?q?=EA=B3=A0,=20=EC=97=90=EB=9F=AC=20=EB=A9=94=EC=84=B8=EC=A7=80?= =?UTF-8?q?=EB=A5=BC=20=EC=B6=9C=EB=A0=A5=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=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/CheckInput.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/CheckInput.java b/src/main/java/CheckInput.java index 5eb8b26a..f87d5f02 100644 --- a/src/main/java/CheckInput.java +++ b/src/main/java/CheckInput.java @@ -12,4 +12,9 @@ public static boolean checkCarName(List carNames) { return true; } + public static void isWrongValue() { + throw new IllegalArgumentException("[ERROR] 잘못된 값을 입력했습니다. 다시 입력하세요."); + + } + } From 57891c6a6631675b94435087c25618a1fe9ef194 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 02:38:49 +0900 Subject: [PATCH 12/30] =?UTF-8?q?fix(CheckInput)=20:=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=20=EC=9D=B4=EB=A6=84=20=EA=B8=B8=EC=9D=B4=20=EB=B2=94?= =?UTF-8?q?=EC=9C=84=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/CheckInput.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/CheckInput.java b/src/main/java/CheckInput.java index f87d5f02..c0f7ac58 100644 --- a/src/main/java/CheckInput.java +++ b/src/main/java/CheckInput.java @@ -4,7 +4,7 @@ public class CheckInput { public static boolean checkCarName(List carNames) { for (String carName : carNames) { int carLength = carName.length(); - if ((carLength < 0) || (carLength > 5)) { + if ((carLength < 1) || (carLength > 5)) { CheckInput.isWrongValue(); return false; } From fdc4063a0bf6ea83f0c368e8e23b18bfe8fbb384 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 02:39:58 +0900 Subject: [PATCH 13/30] =?UTF-8?q?refactor(CheckInput)=20:=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=B0=A8=EB=93=A4=20=EC=9D=B4=EB=A6=84=EC=9D=98=20?= =?UTF-8?q?=EC=9C=A0=ED=9A=A8=EC=84=B1=EC=9D=84=20=EA=B2=80=EC=82=AC?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=ED=95=A8=EC=88=98=EB=AA=85=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/CheckInput.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/CheckInput.java b/src/main/java/CheckInput.java index c0f7ac58..0930cc38 100644 --- a/src/main/java/CheckInput.java +++ b/src/main/java/CheckInput.java @@ -1,7 +1,7 @@ import java.util.List; public class CheckInput { - public static boolean checkCarName(List carNames) { + public static boolean checkCarNames(List carNames) { for (String carName : carNames) { int carLength = carName.length(); if ((carLength < 1) || (carLength > 5)) { From 9b8d07cece5b49d967b5fb238a5a54ea0901ca3b Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 02:42:27 +0900 Subject: [PATCH 14/30] =?UTF-8?q?refactor(Game)=20:=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=EB=93=A4=20=EC=9D=B4=EB=A6=84=EC=9D=84=20=EA=B0=80?= =?UTF-8?q?=EC=A0=B8=EC=98=A4=EB=8A=94=20=ED=95=A8=EC=88=98=20=EB=AA=85?= =?UTF-8?q?=EC=9D=84=20=EB=B3=B5=EC=88=98=ED=98=95=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Game.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/Game.java b/src/main/java/Game.java index 6a260a85..086095bf 100644 --- a/src/main/java/Game.java +++ b/src/main/java/Game.java @@ -3,7 +3,7 @@ public class Game { - public List getCarName() { + public List getCarNames() { List carNames; Scanner sc = new Scanner(System.in); From c2827b3d5793f017b011e211defe0ccebc58ec2d Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 02:47:24 +0900 Subject: [PATCH 15/30] =?UTF-8?q?fix(Car)=20:=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=20=EA=B0=9D=EC=B2=B4=20=EC=83=9D=EC=84=B1=EC=9E=90=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Car.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/Car.java b/src/main/java/Car.java index d33fb180..886eb6cb 100644 --- a/src/main/java/Car.java +++ b/src/main/java/Car.java @@ -2,7 +2,12 @@ public class Car { private String name; - private int state =0; + private int state; + + public Car(String carName) { + this.name= carName; + this.state = 0; + } public void move() { From 521ac23fd45b88c83caaa61aac93a8226231f22a Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 02:48:37 +0900 Subject: [PATCH 16/30] =?UTF-8?q?feat(Game)=20:=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=20=EC=9D=B4=EB=A6=84=20=EB=A6=AC=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=A5=BC=20=EB=B0=94=ED=83=95=EC=9C=BC=EB=A1=9C=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=B0=A8=20=EA=B0=9D=EC=B2=B4=EB=93=A4=EC=9D=84=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=ED=95=98=EC=97=AC=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=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/Game.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/Game.java b/src/main/java/Game.java index 086095bf..3c41c76a 100644 --- a/src/main/java/Game.java +++ b/src/main/java/Game.java @@ -1,3 +1,4 @@ +import java.util.ArrayList; import java.util.List; import java.util.Scanner; @@ -33,6 +34,14 @@ public int getTryNum() { return tryNum; } + public List makeCars(List carNames) { + List Cars = new ArrayList<>(); + for (String carName : carNames) { + Cars.add(new Car(carName)); + } + return Cars; + } + From 4931f836511f70c99b3d7dfdac8b14fc9e6a42c9 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 02:57:27 +0900 Subject: [PATCH 17/30] =?UTF-8?q?feat(Car)=20:=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=20=EA=B0=9D=EC=B2=B4=EC=9D=98=20=ED=98=84=EC=9E=AC=20?= =?UTF-8?q?=EC=83=81=ED=99=A9=EC=9D=84=20=ED=99=94=EB=A9=B4=EC=97=90=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=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/Car.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/Car.java b/src/main/java/Car.java index 886eb6cb..84f25053 100644 --- a/src/main/java/Car.java +++ b/src/main/java/Car.java @@ -19,6 +19,14 @@ public void move() { } } + public void printState() { + System.out.printf("%s : ",this.getName()); + for (int i=0; i Date: Sun, 9 Jun 2024 03:08:30 +0900 Subject: [PATCH 18/30] =?UTF-8?q?feat(Game)=20:=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=EA=B2=BD=EC=A3=BC=EC=9D=98=20=EC=8A=B9=EB=A6=AC?= =?UTF-8?q?=EC=B0=A8=EB=93=A4=EC=9D=84=20=EC=B0=BE=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=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/Game.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/main/java/Game.java b/src/main/java/Game.java index 3c41c76a..27cc9c25 100644 --- a/src/main/java/Game.java +++ b/src/main/java/Game.java @@ -42,6 +42,28 @@ public List makeCars(List carNames) { return Cars; } + public List findWinners(List cars) { + + int winnerState= cars.get(0).getState(); + + for (Car car : cars) { + int carState = car.getState(); + if (carState > winnerState) { + winnerState = carState; + } + } + + List winnerList= new ArrayList<>(); + + for (Car car : cars) { + int carState = car.getState(); + if (carState == winnerState) { + winnerList.add(car); + } + } + return winnerList; + } + From 53f0f25aec575ddcbf8bf59bd801d65d6d7dd60e Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 03:12:45 +0900 Subject: [PATCH 19/30] =?UTF-8?q?feat(Game)=20:=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=EA=B2=BD=EC=A3=BC=EC=9D=98=20=EC=8A=B9=EB=A6=AC?= =?UTF-8?q?=EC=B0=A8=EB=93=A4=EC=9D=84=20=EC=B6=9C=EB=A0=A5=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=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/Game.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/Game.java b/src/main/java/Game.java index 27cc9c25..baa70d83 100644 --- a/src/main/java/Game.java +++ b/src/main/java/Game.java @@ -64,7 +64,11 @@ public List findWinners(List cars) { return winnerList; } - - - + public void printWinners(List cars) { + System.out.print("최종 우승자 : "); + for (int i = 0; i < (cars.size() - 1); i++) { + System.out.print(cars.get(i).getName() + ", "); + } + System.out.println(cars.get(cars.size() - 1).getName()); + } } From feb69a77b123269e832b2e45bab6a1ed95751499 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 03:13:19 +0900 Subject: [PATCH 20/30] =?UTF-8?q?feat(Application)=20:=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=B0=A8=EA=B2=BD=EC=A3=BC=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=A7=84=ED=96=89=20=EA=B8=B0=EB=8A=A5=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/Application.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/Application.java diff --git a/src/main/java/Application.java b/src/main/java/Application.java new file mode 100644 index 00000000..82e7aa04 --- /dev/null +++ b/src/main/java/Application.java @@ -0,0 +1,23 @@ +import java.util.List; + +public class Application { + public static void main(String[] args) { + Game g = new Game(); + List carNames = g.getCarNames(); + List cars = g.makeCars(carNames); + + int tryNum= g.getTryNum(); + System.out.println("실행 결과"); + for (int i=0; i winners= g.findWinners(cars); + g.printWinners(winners); + + } +} From b68779c910e3d7107ac8f39229fa291638355cd2 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 03:14:40 +0900 Subject: [PATCH 21/30] =?UTF-8?q?docs(Readme)=20:=20Readme.md=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 --- README.md | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index db229ea1..1edbea23 100644 --- a/README.md +++ b/README.md @@ -8,40 +8,46 @@ [x] move() 움직일지 말지 결정하고 반영하는 메서드 * 0~9사이 무작위 값 구한후, 무작위 값이 4 이상일 경우 1칸 움직임 * 실행 결과를 자동차 객체 상태 state 변수에 반영 - +[x] 자동차 객체의 이동 현황 출력 ## 게임 진행 프로그램 Game class [x] getCarName() 자동차 이름 입력받기 기능 [x] 경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분) [x] 이상치 체크 후 이상한 값인 경우 입력을 다시 받도록함 -[ ] getTryNum() 시도 회수 입력받기 기능 - [ ] 시도할 회수는 몇회인가요? - [ ] 이상치 체크 후 이상한 값인 경우 입력을 다시 받도록함 +[x] getTryNum() 시도 회수 입력받기 기능 + [x] 시도할 회수는 몇회인가요? + [x] 이상치 체크 후 이상한 값인 경우 입력을 다시 받도록함 + +[x] 자동차 객체를 생성 하는 기능 -[ ] printResult() 실행 결과를 출력하는 기능 - [ ]실행 결과 - pobi : - woni : - jun : -[ ] checkWinner() 경주 종료 후, 최종 우승자를 판별하는 기능 (여러명 일 수 있음) -[ ] printWinner() 최종 우승자를 출력하는 기능 - [ ] 최종 우승자 : +[x] findWinner() 경주 종료 후, 최종 우승자를 판별하는 기능 (여러명 일 수 있음) +[x] printWinner() 최종 우승자를 출력하는 기능 + [x] 최종 우승자 : ## 이상치 판별 클래스 CheckInput class -[ ] 자동차 이름 이상 판별 +[x] checkCarName(List carNames)자동차 이름 이상 판별 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다. -[ ] 시도 회수 이상 판별 - 숫자가 아닌경우 이상치 -[ ] 잘못된 값 입력시 - [ ] IllegalArgumentException 를 발생시키고, - [ ] "[ERROR]"로 시작하는 에러 메시지를 출력 +[x] isWrongValue() 잘못된 값 입력시 에러발생 및 출력 + [x] IllegalArgumentException 를 발생시키고, + [x] "[ERROR]"로 시작하는 에러 메시지를 출력 + +## 게임 진행 클래스 Application class +[x] 사용자로부터 자동차 이름 입력받기 +[x] 자동차 객체 생성하기 +[x] 사용자로부터 게임 회수 입력받기 + +[x] 회수만큼 게임 진행 + [x] 자동차 객체별로 이동거리 관리 + [x] 실행결과 출력 +[x] 최종 우승자 계산 +[x] 최종 우승자 출력 ## 참고 -* 메서드 명은 동사로 시작 -* 메서드명 , 클래스 명이 모호하지 않도록 하기 +[ ] 메서드 명은 동사로 시작 +[ ] 메서드명 , 클래스 명이 모호하지 않도록 하기 ## 실행결과 예시 From bc82d113c8a2c3e077057adec7abdd503a0154ea Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 19:34:38 +0900 Subject: [PATCH 22/30] =?UTF-8?q?docs(Readme)=20:=20Readme.md=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 --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 1edbea23..3e276164 100644 --- a/README.md +++ b/README.md @@ -3,16 +3,16 @@ # 객체별 기능 목록 ## 자동차 객체 Car class -[x] String name 자동차 이름 저장하는 변수 -[x] int state 현재까지 얼만큼 움직였는지 저장하는 변수 -[x] move() 움직일지 말지 결정하고 반영하는 메서드 +- [x] String name 자동차 이름 저장하는 변수 +- [x] int state 현재까지 얼만큼 움직였는지 저장하는 변수 +- [x] move() 움직일지 말지 결정하고 반영하는 메서드 * 0~9사이 무작위 값 구한후, 무작위 값이 4 이상일 경우 1칸 움직임 * 실행 결과를 자동차 객체 상태 state 변수에 반영 -[x] 자동차 객체의 이동 현황 출력 +- [x] 자동차 객체의 이동 현황 출력 ## 게임 진행 프로그램 Game class -[x] getCarName() 자동차 이름 입력받기 기능 - [x] 경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분) +- [x] getCarName() 자동차 이름 입력받기 기능 + - [x] 경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분) [x] 이상치 체크 후 이상한 값인 경우 입력을 다시 받도록함 [x] getTryNum() 시도 회수 입력받기 기능 From 4ed6468e396d8318cf9cc375efc06d0cadbe4165 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 19:38:09 +0900 Subject: [PATCH 23/30] =?UTF-8?q?fix(CheckInput)=20:=20String=20=EA=B0=92?= =?UTF-8?q?=EC=9D=84=20=EB=B0=9B=EC=95=84=EC=84=9C=20int=20=EC=9D=B8?= =?UTF-8?q?=EC=A7=80=20=ED=99=95=EC=9D=B8=ED=95=98=EB=8A=94=20=EA=B5=AC?= =?UTF-8?q?=EB=AC=B8=20=EC=A3=BC=EC=84=9D=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/CheckInput.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/CheckInput.java b/src/main/java/CheckInput.java index 0930cc38..104751be 100644 --- a/src/main/java/CheckInput.java +++ b/src/main/java/CheckInput.java @@ -1,3 +1,4 @@ +import java.util.IllegalFormatException; import java.util.List; public class CheckInput { @@ -12,9 +13,21 @@ public static boolean checkCarNames(List carNames) { return true; } + /* public static boolean checkInt(String intNum) { + try { + Integer.parseInt(intNum); + return true; + } catch (IllegalFormatException e) { + CheckInput.isWrongValue(); + return false; + } + }*/ + public static void isWrongValue() { throw new IllegalArgumentException("[ERROR] 잘못된 값을 입력했습니다. 다시 입력하세요."); } + + } From ba7993199d0428814b41c88a8103ab04ceed59c4 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 19:39:51 +0900 Subject: [PATCH 24/30] =?UTF-8?q?fix(Game)=20:=20Scanner=20=EB=B6=80?= =?UTF-8?q?=EB=B6=84=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20->=20clos?= =?UTF-8?q?e=20=ED=95=98=EC=A7=80=20=EC=95=8A=EA=B3=A0,=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=A9=A4=EB=B2=84=EB=B3=80=EC=88=98?= =?UTF-8?q?=EB=A1=9C=20=EC=84=A0=EC=96=B8,=20=EC=83=9D=EC=84=B1=EC=9E=90?= =?UTF-8?q?=20=EC=B4=88=EA=B8=B0=ED=99=94=20=ED=95=98=EB=8A=94=20=EB=B0=A9?= =?UTF-8?q?=EC=8B=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Game.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/Game.java b/src/main/java/Game.java index baa70d83..93441f63 100644 --- a/src/main/java/Game.java +++ b/src/main/java/Game.java @@ -1,18 +1,19 @@ -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; +import java.util.*; public class Game { + Scanner sc; + public Game(){ + sc = new Scanner(System.in); + } public List getCarNames() { List carNames; - Scanner sc = new Scanner(System.in); + while (true) { System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); - carNames = List.of(sc.nextLine().split(",")); + carNames = List.of(sc.next().split(",")); if (CheckInput.checkCarNames(carNames)) { - sc.close(); break; } } @@ -21,13 +22,12 @@ public List getCarNames() { public int getTryNum() { int tryNum; - Scanner sc = new Scanner(System.in); + System.out.println("시도할 회수는 몇회인가요?"); while (true) { - System.out.println("시도할 회수는 몇회인가요?"); try { tryNum = sc.nextInt(); break; - } catch (IllegalArgumentException e) { + } catch (InputMismatchException e){ CheckInput.isWrongValue(); } } From 73b26ff82be9168ff954bc89278cf7423d8e9978 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 20:19:49 +0900 Subject: [PATCH 25/30] =?UTF-8?q?fix(CheckInput)=20:=20=EC=97=90=EB=9F=AC?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EC=88=98=EC=A0=95=20->=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=EC=B2=98=EB=A6=AC=EA=B0=80=20=EB=90=98=EC=97=88?= =?UTF-8?q?=EC=9D=84=EB=95=8C=20=ED=94=84=EB=A1=9C=EA=B7=B8=EB=9E=A8?= =?UTF-8?q?=EC=9D=B4=20=EB=A9=88=EC=B6=94=EC=A7=80=20=EC=95=8A=EA=B3=A0=20?= =?UTF-8?q?ERROR=20=EB=A9=94=EC=8B=9C=EC=A7=80=EA=B0=80=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=EB=90=98=EA=B3=A0=20=EB=8B=A4=EC=8B=9C=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EC=9D=84=20=EB=B0=9B=EB=8F=84=EB=A1=9D=20&=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=EB=B0=9C=EC=83=9D=20=EA=B2=BD=EC=9A=B0?= =?UTF-8?q?=EB=A5=BC=20=EB=8D=94=20=EC=84=B8=EB=B6=84=ED=99=94=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/CheckInput.java | 42 ++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/src/main/java/CheckInput.java b/src/main/java/CheckInput.java index 104751be..9a0dd2c1 100644 --- a/src/main/java/CheckInput.java +++ b/src/main/java/CheckInput.java @@ -1,33 +1,43 @@ +import java.util.HashSet; import java.util.IllegalFormatException; import java.util.List; public class CheckInput { public static boolean checkCarNames(List carNames) { + if(!checkCarNameDiffer(carNames)){ + return false; + } for (String carName : carNames) { int carLength = carName.length(); - if ((carLength < 1) || (carLength > 5)) { - CheckInput.isWrongValue(); + if(!checkCarNameLength(carName)){ return false; - } + }; } return true; } - /* public static boolean checkInt(String intNum) { - try { - Integer.parseInt(intNum); - return true; - } catch (IllegalFormatException e) { - CheckInput.isWrongValue(); - return false; + public static boolean checkCarNameDiffer(List carNames) { + boolean check = true; + HashSet setNames = new HashSet<>(carNames); + if (setNames.size() != carNames.size()) { + check=false; + throw new IllegalStateException("[ERROR] 자동차의 이름은 모두 다르게 입력해주세요."); } - }*/ - - public static void isWrongValue() { - throw new IllegalArgumentException("[ERROR] 잘못된 값을 입력했습니다. 다시 입력하세요."); - + return check; } + public static boolean checkCarNameLength(String name) { + boolean result = true; + if ((name.length() < 1) || (name.length() > 5)) { + result= false; + throw new IllegalArgumentException("[ERROR] 차 이름의 길이는 1글자~5글자 사이로 입력해주세요."); + } + return result; + } - + public static void isWrongIntValue(int tryNum) { + if (tryNum < 1) { + throw new IllegalArgumentException("[ERROR] 잘못된 값을 입력했습니다. 1이상의 정수를 다시 입력하세요."); + } + } } From 7a3cafe2da51850a3b968e2eb652253ea42d54f2 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 20:20:39 +0900 Subject: [PATCH 26/30] =?UTF-8?q?fix(Game)=20:=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=EB=A1=9C=EB=B6=80=ED=84=B0=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EA=B0=92=EC=9D=84=20=EB=B0=9B=EC=9D=84=EB=96=84=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=EC=B2=98=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=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/Game.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/Game.java b/src/main/java/Game.java index 93441f63..96c7a8c8 100644 --- a/src/main/java/Game.java +++ b/src/main/java/Game.java @@ -11,13 +11,16 @@ public List getCarNames() { while (true) { - System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); - carNames = List.of(sc.next().split(",")); - if (CheckInput.checkCarNames(carNames)) { - break; + try { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + carNames = List.of(sc.next().split(",")); + CheckInput.checkCarNames(carNames); + return carNames; + } catch (IllegalArgumentException | IllegalStateException e) { + System.out.println(e.getMessage()); } } - return carNames; + } public int getTryNum() { @@ -26,9 +29,13 @@ public int getTryNum() { while (true) { try { tryNum = sc.nextInt(); + CheckInput.isWrongIntValue(tryNum); break; } catch (InputMismatchException e){ - CheckInput.isWrongValue(); + System.out.println("[ERROR] 잘못된 값을 입력했습니다. 1 이상의 정수를 다시 입력하세요."); + sc.next(); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); } } return tryNum; From 9ad5a3a6fa717a0c50b036574c0b47688068197a Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 20:26:31 +0900 Subject: [PATCH 27/30] =?UTF-8?q?feat(CheckInput)=20:=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=20=EC=9E=85=EB=A0=A5=EA=B0=92=EC=9D=B4=20=EC=97=86?= =?UTF-8?q?=EC=9D=84=EB=95=8C=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/CheckInput.java | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/main/java/CheckInput.java b/src/main/java/CheckInput.java index 9a0dd2c1..28be96f8 100644 --- a/src/main/java/CheckInput.java +++ b/src/main/java/CheckInput.java @@ -3,36 +3,32 @@ import java.util.List; public class CheckInput { - public static boolean checkCarNames(List carNames) { - if(!checkCarNameDiffer(carNames)){ - return false; + + public static void checkCarCount(List carNames) { + if (carNames.size() < 2) { + throw new IllegalArgumentException("[ERROR] 자동차를 2대 이상 적어야 경주가 시작됩니다."); } + } + + public static void checkCarNames(List carNames) { + checkCarNameDiffer(carNames); for (String carName : carNames) { int carLength = carName.length(); - if(!checkCarNameLength(carName)){ - return false; - }; + checkCarNameLength(carName); } - return true; } - public static boolean checkCarNameDiffer(List carNames) { - boolean check = true; + public static void checkCarNameDiffer(List carNames) { HashSet setNames = new HashSet<>(carNames); if (setNames.size() != carNames.size()) { - check=false; throw new IllegalStateException("[ERROR] 자동차의 이름은 모두 다르게 입력해주세요."); } - return check; } - public static boolean checkCarNameLength(String name) { - boolean result = true; - if ((name.length() < 1) || (name.length() > 5)) { - result= false; + public static void checkCarNameLength(String name) { + if ((name.isEmpty()) || (name.length() > 5)) { throw new IllegalArgumentException("[ERROR] 차 이름의 길이는 1글자~5글자 사이로 입력해주세요."); } - return result; } public static void isWrongIntValue(int tryNum) { From 7226059d50bb2b0eb06a3d27120823366867dde6 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 20:27:35 +0900 Subject: [PATCH 28/30] =?UTF-8?q?feat(Game)=20:=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EB=B0=9B=EC=9D=80=20=EC=9E=90=EB=8F=99=EC=B0=A8=20=EA=B0=9C?= =?UTF-8?q?=EC=88=98=20=EC=B2=B4=ED=81=AC=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=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/Game.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/Game.java b/src/main/java/Game.java index 96c7a8c8..4bb8b14f 100644 --- a/src/main/java/Game.java +++ b/src/main/java/Game.java @@ -14,13 +14,13 @@ public List getCarNames() { try { System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); carNames = List.of(sc.next().split(",")); + CheckInput.checkCarCount(carNames); CheckInput.checkCarNames(carNames); return carNames; } catch (IllegalArgumentException | IllegalStateException e) { System.out.println(e.getMessage()); } } - } public int getTryNum() { From a8ca64f932b0c99429a6ecff23f5887f8d10cc76 Mon Sep 17 00:00:00 2001 From: Shsin9797 Date: Sun, 9 Jun 2024 22:25:13 +0900 Subject: [PATCH 29/30] =?UTF-8?q?feat(Car)=20:=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1=20=EC=8B=A4?= =?UTF-8?q?=ED=8C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/CarTest.java | 20 ++++++++++++ src/test/java/CarTest2.java | 53 +++++++++++++++++++++++++++++++ src/test/java/CarsTest.java | 30 +++++++++++++++++ src/test/java/CheckInputTest.java | 28 ++++++++++++++++ 4 files changed, 131 insertions(+) create mode 100644 src/test/java/CarTest.java create mode 100644 src/test/java/CarTest2.java create mode 100644 src/test/java/CarsTest.java create mode 100644 src/test/java/CheckInputTest.java diff --git a/src/test/java/CarTest.java b/src/test/java/CarTest.java new file mode 100644 index 00000000..fc656250 --- /dev/null +++ b/src/test/java/CarTest.java @@ -0,0 +1,20 @@ + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + + +public class CarTest { + @Test + public void carNameShouldNotExceedFiveCharacters() { + assertThatThrownBy(() -> new Car("sixletters")) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("[ERROR] 자동차 이름은 5자를 초과할 수 없습니다."); + } + + @Test + + } +} diff --git a/src/test/java/CarTest2.java b/src/test/java/CarTest2.java new file mode 100644 index 00000000..a23168fb --- /dev/null +++ b/src/test/java/CarTest2.java @@ -0,0 +1,53 @@ + + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.junit.jupiter.api.Test; + +public class CarTest2 { + + @Test + void 자동차_이름이_유효한_경우() { + Car car = new Car("민성"); + assertThat(car.getName()).isEqualTo("민성"); + } + + @Test + void 자동차_이름이_null인_경우_예외처리() { + assertThatThrownBy(() -> new Car(null)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("[ERROR]"); + } + + @Test + void 자동차_이름이_5자를_초과하는_경우_예외처리() { + assertThatThrownBy(() -> new Car("pobi123")) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("[ERROR]"); + } + + @Test + void 자동차_이름이_1자_미만인_경우_예외처리() { + assertThatThrownBy(() -> new Car("")) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("[ERROR]"); + } + + /*@Test + void 자동차가_전진하는_경우() { + Car car = new Car("민성"); + car.run(4); + assertThat(car.getDistance()).isEqualTo(1); + } + + @Test + void 자동차가_멈추는_경우() { + Car car = new Car("민성"); + car.run(3); + assertThat(car.getDistance()).isEqualTo(0); + } + */ + +} + diff --git a/src/test/java/CarsTest.java b/src/test/java/CarsTest.java new file mode 100644 index 00000000..a7e03e09 --- /dev/null +++ b/src/test/java/CarsTest.java @@ -0,0 +1,30 @@ +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class CarsTest { + Car car; + CheckInput checkInput; + Game game; + + @BeforeEach + void setUp() { + checkInput=new CheckInput(); + game= new Game(); + } + + @ParameterizedTest + @ValueSource(strings = "aaa,bbb,abdcdddd") + @DisplayName("입력받은 자동차 이름 길이 유효성 검사,길이가 5이상 일 경우(예외 발생)") + void checkInputCarNameLengthValidException(final String name) { + assertThatThrownBy(() -> game.getCarNames()) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("[ERROR] 차 이름의 길이는 1글자~5글자 사이로 입력해주세요."); + } +} diff --git a/src/test/java/CheckInputTest.java b/src/test/java/CheckInputTest.java new file mode 100644 index 00000000..3403f281 --- /dev/null +++ b/src/test/java/CheckInputTest.java @@ -0,0 +1,28 @@ +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class CheckInputTest { + + @Test + @DisplayName("자동차 이름 중복 되는 경우 예외처리 테스트") + public void carNameShouldNotExceedFiveCharacters() { + assertThatThrownBy(() -> new Car("sixletters")) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("[ERROR] 자동차 이름은 5자를 초과할 수 없습니다."); + } + /*public void checkCarNames_InvalidInput() { + List carNames = new ArrayList<>(Arrays.asList("abc", "abc", "ghi")); + + // IllegalStateException 예외 발생 확인 + assertThatThrownBy(() -> CheckInput.checkCarNames(carNames)) + .isInstanceOf(IllegalStateException.class) + .hasMessageContaining("[ERROR] 자동차의 이름은 모두 다르게 입력해주세요."); + }*/ + +} From a2d558f352d2ebf4b369df67d5437d771b6bd311 Mon Sep 17 00:00:00 2001 From: Cindy <93774025+Shsin9797@users.noreply.github.com> Date: Sun, 9 Jun 2024 23:00:44 +0900 Subject: [PATCH 30/30] =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BC=80?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=EC=9E=91=EC=84=B1=20=EC=B0=B8=EA=B3=A0?= =?UTF-8?q?=EC=9A=A9=20=ED=8C=8C=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/CarTest2.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/CarTest2.java b/src/test/java/CarTest2.java index a23168fb..83474a94 100644 --- a/src/test/java/CarTest2.java +++ b/src/test/java/CarTest2.java @@ -1,4 +1,5 @@ +/*참고용 파일*/ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy;