From aafa0a53d9f35cce2bf46d1c611f70bec7f15272 Mon Sep 17 00:00:00 2001 From: donghyuun Date: Wed, 1 May 2024 17:35:03 +0900 Subject: [PATCH 01/12] =?UTF-8?q?README.md=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8d7e8aee..54fc221c 100644 --- a/README.md +++ b/README.md @@ -1 +1,55 @@ -# java-baseball-precourse \ No newline at end of file +# java-baseball-precourse +## 기능 요구 사항 +기본적으로 1~9까지 "서로 다른 수"로 이루어진 3자리의 수를 맞추는 게임. + +같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다. + +### 기능 목록 +0. 기본 골조 마련(while문) +1. 컴퓨터가 임의의 "서로 다른" 숫자 3개를 선택하고, 해당 숫자를 순서대로 배열에 저장 +2. 게임 플레이어가 "서로 다른" 3개의 숫자를 입력 +3. 올바르지 않은 입력값인 경우, IlllegalArgumentException 을 발생시킨 후 프로그램을 종료(게임 종료와 다름). +4. 올바른 입력값인 경우 해당 숫자를 순서대로 배열에 저장 +3. 컴퓨터는 입력한 숫자에 대한 결과를 출력 + 1. 같은 수가 같은 자리에 있으면 스트라이크 + 2. 다른 자리에 있으면 볼 + 3. 같은 수가 전혀 없으면 낫싱이란 힌트 제공 + +위 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임 종료 + +6. 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료(프로그램 종료)할 수 있다 + +### 기본 코드 구조 +유효값 검증 및 에러 처리 생략 +``` + +while(true) { + randNumArray = 랜덤 숫자 입력받아서 순서대로 배열에 저장 (메서드) + + result = false + while(result == false){ + numArray = 사용자 숫자 입력 (메서드) + result = 결과 판별 (메서드) + } + + reStart = 종료 시 다시 할지 안할 지 선택 (메서드) + if(reStart == 1){재시작} + else if(reStart == 2){프로그램 종료} +} + +사용자 숫자 입력 메서드(){ + ... + 배열에 순서대로 저장한 후 반환 +} + +결과 판별 메서드(numArray){ + ... + 결과 화면에 출력 + 결과 반환(t/f) +} + +게임 재시작 여부 선택 메서드(){ + reStart = 선택(1 or 2) + reStart 반환 +} +``` \ No newline at end of file From 22921fa9ecd1581a875108983f8f89ab806ad0e4 Mon Sep 17 00:00:00 2001 From: donghyuun Date: Wed, 1 May 2024 17:43:37 +0900 Subject: [PATCH 02/12] =?UTF-8?q?README.md=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 54fc221c..86c2ca54 100644 --- a/README.md +++ b/README.md @@ -6,18 +6,15 @@ ### 기능 목록 0. 기본 골조 마련(while문) -1. 컴퓨터가 임의의 "서로 다른" 숫자 3개를 선택하고, 해당 숫자를 순서대로 배열에 저장 -2. 게임 플레이어가 "서로 다른" 3개의 숫자를 입력 -3. 올바르지 않은 입력값인 경우, IlllegalArgumentException 을 발생시킨 후 프로그램을 종료(게임 종료와 다름). -4. 올바른 입력값인 경우 해당 숫자를 순서대로 배열에 저장 -3. 컴퓨터는 입력한 숫자에 대한 결과를 출력 +1. 컴퓨터가 임의의 "서로 다른" 숫자 3개를 선택한 후, 해당 숫자를 순서대로 배열에 저장 +2. 게임 플레이어가 "서로 다른" 3개의 숫자를 입력한 후, 해당 숫자를 순서대로 배열에 저장 +3. 게임 플레이어가 입력한 숫자에 대한 결과 판별 1. 같은 수가 같은 자리에 있으면 스트라이크 2. 다른 자리에 있으면 볼 3. 같은 수가 전혀 없으면 낫싱이란 힌트 제공 -위 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임 종료 - -6. 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료(프로그램 종료)할 수 있다 +4. (스트라이크 시) 게임 재시작 여부 선택 +5. 유효값 검증 등 오류 처리(IllegalArgumentException) ### 기본 코드 구조 유효값 검증 및 에러 처리 생략 @@ -31,8 +28,8 @@ while(true) { numArray = 사용자 숫자 입력 (메서드) result = 결과 판별 (메서드) } - - reStart = 종료 시 다시 할지 안할 지 선택 (메서드) + --- 스트라이크인 상태 --- + reStart = 게임 재시작 여부 선택 (메서드) if(reStart == 1){재시작} else if(reStart == 2){프로그램 종료} } From 053e2d192f00c4acd17443c418a184f11f6f922e Mon Sep 17 00:00:00 2001 From: donghyuun Date: Wed, 1 May 2024 17:46:53 +0900 Subject: [PATCH 03/12] =?UTF-8?q?0.=20=EA=B8=B0=EB=B3=B8=20=EA=B3=A8?= =?UTF-8?q?=EC=A1=B0=20=EB=A7=88=EB=A0=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/main.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/main/java/main.java diff --git a/src/main/java/main.java b/src/main/java/main.java new file mode 100644 index 00000000..a12973be --- /dev/null +++ b/src/main/java/main.java @@ -0,0 +1,14 @@ +public class main { + public static void main(String[] args) { + + while(true){ + + + + + + + } + + } +} From 4dbd4afbade1c24d03c55c188c7b1bdf8dd7db21 Mon Sep 17 00:00:00 2001 From: donghyuun Date: Wed, 1 May 2024 18:15:36 +0900 Subject: [PATCH 04/12] =?UTF-8?q?1.=20=EC=BB=B4=ED=93=A8=ED=84=B0=EA=B0=80?= =?UTF-8?q?=20=EC=84=9C=EB=A1=9C=20=EB=8B=A4=EB=A5=B8=20=EC=88=AB=EC=9E=90?= =?UTF-8?q?=203=EA=B0=9C=EB=A5=BC=20=EB=BD=91=EC=95=84=20=EC=88=9C?= =?UTF-8?q?=EC=84=9C=EB=8C=80=EB=A1=9C=20=EB=B0=B0=EC=97=B4=EC=97=90=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/main.java | 25 +++++++++++++++++++++++-- src/test/java/test.java | 24 ++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 src/test/java/test.java diff --git a/src/main/java/main.java b/src/main/java/main.java index a12973be..064841a3 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -1,8 +1,14 @@ +import jdk.jfr.Description; + +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Random; + public class main { public static void main(String[] args) { while(true){ - + ArrayList randNumArray = makeRandNumArray(); @@ -11,4 +17,19 @@ public static void main(String[] args) { } } -} + + + @Description("컴퓨터가 랜덤으로 겹치지 않는 3개의 숫자를 뽑아 순서대로 배열에 저장") + public static ArrayList makeRandNumArray(){ + ArrayList numArray = new ArrayList<>(); + while(numArray.size() < 3){ + Random random = new Random(); + int n = random.nextInt(8); // 0~8 난수 생성 + + if(!numArray.contains(n)) { // 배열에 없는 경우 숫자 추가 + numArray.add(n); + } + } + return numArray; + } +} \ No newline at end of file diff --git a/src/test/java/test.java b/src/test/java/test.java new file mode 100644 index 00000000..6cf9b188 --- /dev/null +++ b/src/test/java/test.java @@ -0,0 +1,24 @@ +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Random; + +public class test { + + @Test + void makeRandNumArray(){ + ArrayList numArray = new ArrayList<>(); + while(numArray.size() < 3){ + Random random = new Random(); + // 1~9 난수 생성 + int n = random.nextInt(8) + 1; + // 배열에 없는 경우 숫자 추가 + if(!numArray.contains(n)) { + numArray.add(n); + } + } + for (Integer integer : numArray) { + System.out.println(integer); + } + } +} From 404fbc0a78401f3e3711901c8d60e33f784c9ec0 Mon Sep 17 00:00:00 2001 From: donghyuun Date: Wed, 1 May 2024 20:09:06 +0900 Subject: [PATCH 05/12] =?UTF-8?q?=ED=94=8C=EB=A0=88=EC=9D=B4=EC=96=B4?= =?UTF-8?q?=EA=B0=80=20=EC=84=9C=EB=A1=9C=20=EB=8B=A4=EB=A5=B8=20=EC=88=AB?= =?UTF-8?q?=EC=9E=90=203=EA=B0=9C=EB=A5=BC=20=EB=BD=91=EC=95=84=20?= =?UTF-8?q?=EC=88=9C=EC=84=9C=EB=8C=80=EB=A1=9C=20=EB=B0=B0=EC=97=B4?= =?UTF-8?q?=EC=97=90=20=EC=A0=80=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/main.java | 55 ++++++++++++++++++++++++++++++++++++----- src/test/java/test.java | 39 +++++++++++++++++++++++++++-- 2 files changed, 86 insertions(+), 8 deletions(-) diff --git a/src/main/java/main.java b/src/main/java/main.java index 064841a3..7f4372ef 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -1,25 +1,67 @@ import jdk.jfr.Description; -import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.Random; +import java.util.*; public class main { public static void main(String[] args) { + try { + while(true){ + // 1. 컴퓨터가 랜덤으로 서로 다른 값 3개를 골라 순서대로 배열에 저장 + ArrayList randNumArray = makeRandNumArray(); - while(true){ - ArrayList randNumArray = makeRandNumArray(); + Boolean result = false; + while(!result){ + // 2. 사용자가 3개의 숫자 입력, 순서대로 배열에 저장 + ArrayList userNumArray = makeUserNumArray(); + } + } + + } catch (IllegalArgumentException e) { + System.out.println("The entered value is invalid. The application will exit."); + } + + } + +// @Description("플레이어가 겹치지 않는 3개의 숫자를 입력해 순서대로 배열에 저장") + static ArrayList makeUserNumArray() { + Scanner scanner = new Scanner(System.in); + String nStr = scanner.next(); // 3자리 숫자 입력 + + char[] charArray = nStr.toCharArray(); + ArrayList userNumArray = new ArrayList<>(); + for (char c : charArray) { + if(checkDuplicate(charArray, c)){ // 중복인 경우 에러 발생시킴 + throw new IllegalArgumentException(); + } + else{ + userNumArray.add(Integer.parseInt(String.valueOf(c))); + } + } + + for (Integer integer : userNumArray) { + System.out.println(integer); } + return userNumArray; + } + +// @Description("플레이어가 입력한 숫자(현 배열)에서 중복된 문자가 있는지 판별") + private static boolean checkDuplicate(char[] charArray, char c) { + int cnt = 0; + for (char c1 : charArray) { + if(c1 == c){cnt++;} + } + if(cnt > 1){ return true;} + else{return false;} } - @Description("컴퓨터가 랜덤으로 겹치지 않는 3개의 숫자를 뽑아 순서대로 배열에 저장") +// @Description("컴퓨터가 랜덤으로 겹치지 않는 3개의 숫자를 뽑아 순서대로 배열에 저장") public static ArrayList makeRandNumArray(){ ArrayList numArray = new ArrayList<>(); while(numArray.size() < 3){ @@ -28,6 +70,7 @@ public static ArrayList makeRandNumArray(){ if(!numArray.contains(n)) { // 배열에 없는 경우 숫자 추가 numArray.add(n); + System.out.println("rand num = " + n); } } return numArray; diff --git a/src/test/java/test.java b/src/test/java/test.java index 6cf9b188..d8f3706d 100644 --- a/src/test/java/test.java +++ b/src/test/java/test.java @@ -1,11 +1,12 @@ +import jdk.jfr.Description; import org.junit.jupiter.api.Test; -import java.util.ArrayList; -import java.util.Random; +import java.util.*; public class test { @Test + @Description("컴퓨터가 랜덤으로 겹치지 않는 3개의 숫자를 뽑아 순서대로 배열에 저장") void makeRandNumArray(){ ArrayList numArray = new ArrayList<>(); while(numArray.size() < 3){ @@ -21,4 +22,38 @@ void makeRandNumArray(){ System.out.println(integer); } } + + @Test + @Description("플레이어가 겹치지 않는 3개의 숫자를 입력해 순서대로 배열에 저장") + void makeUserNumArray() { + Scanner scanner = new Scanner(System.in); +// String nStr = scanner.next(); // 3자리 숫자 입력 + String nStr = "243"; // 테스트 케이스 + + char[] charArray = nStr.toCharArray(); + ArrayList userNumArray = new ArrayList<>(); + + for (char c : charArray) { + if(checkDuplicate(charArray, c)){ // 중복인 경우 에러 발생시킴 + throw new IllegalArgumentException(); + } + else{ + userNumArray.add(Integer.parseInt(String.valueOf(c))); + } + } + + for (Integer integer : userNumArray) { + System.out.println(integer); + } + } + + @Description("플레이어가 입력한 숫자(현 배열)에서 중복된 문자가 있는지 판별") + private boolean checkDuplicate(char[] charArray, char c) { + int cnt = 0; + for (char c1 : charArray) { + if(c1 == c){cnt++;} + } + if(cnt > 1){ return true;} + else{return false;} + } } From dfd1913df82118f158b258d755dbf2a742520e23 Mon Sep 17 00:00:00 2001 From: donghyuun Date: Wed, 1 May 2024 20:32:18 +0900 Subject: [PATCH 06/12] =?UTF-8?q?4.=20(=EC=8A=B9=EB=A6=AC=20=EC=8B=9C)=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84=20=EC=9E=AC=EC=8B=9C=EC=9E=91=20=EC=97=AC?= =?UTF-8?q?=EB=B6=80=20=EC=84=A0=ED=83=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/main.java | 70 +++++++++++++++++++++++++++++++++++++++-- src/test/java/test.java | 55 ++++++++++++++++++++++++++++++-- 2 files changed, 120 insertions(+), 5 deletions(-) diff --git a/src/main/java/main.java b/src/main/java/main.java index 7f4372ef..05e6fc2d 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -15,9 +15,13 @@ public static void main(String[] args) { // 2. 사용자가 3개의 숫자 입력, 순서대로 배열에 저장 ArrayList userNumArray = makeUserNumArray(); - - + // 3. 게임 플레이어가 입력한 숫자에 대한 결과 판별 + result = showResult(userNumArray, randNumArray); } + + // 4. 게임 재시작 여부 선택 + int reStart = checkReStart(); + if(reStart == 2) break; } } catch (IllegalArgumentException e) { @@ -26,10 +30,70 @@ public static void main(String[] args) { } -// @Description("플레이어가 겹치지 않는 3개의 숫자를 입력해 순서대로 배열에 저장") +// @Description("게임 재시작 여부를 선택") + private static int checkReStart() { + System.out.println("Want to restart? 1(Yes), 2(No): "); + Scanner scanner = new Scanner(System.in); + int rst = scanner.nextInt(); + + if (rst != 1 && rst != 2) throw new IllegalArgumentException(); + else{ + return rst; + } + } + + // @Description("플레이어가 입력한 숫자에 대한 결과 판별") + private static Boolean showResult(ArrayList userNumArray, ArrayList randNumArray) { + int strike = 0; + int ball = 0; + // 1. 스트라이크 개수 계산 + strike = countStrike(userNumArray, randNumArray); + // 2. 볼 개수 계산 + ball = countBall(userNumArray, randNumArray); + // 3. 같은 수가 전혀 없으면 낫싱이란 힌트 제공 + if(strike == 0 && ball == 0){ + System.out.println("nothing"); + } + // 같은 수 있는 경우 결과 제시 + else{ + System.out.println(strike + " strike " + ball + " ball"); + } + + if (strike == 3) { // 올 스트라이크 + System.out.println("You have guessed all 3 numbers correctly! Game finish!."); + return true; + }else{ // 올 스트라이크가 아닌 경우 + return false; + } + } + +// @Description("볼 개수 계산") + private static int countBall(ArrayList userNumArray, ArrayList randNumArray) { + int ballCnt = 0; + for(int i = 0; i < userNumArray.size(); i++){ + if(randNumArray.contains(userNumArray.get(i)) && !Objects.equals(randNumArray.get(i), userNumArray.get(i))){ + ballCnt++; + } + } + return ballCnt; + } + +// @Description("스트라이크 개수 계산") + private static int countStrike(ArrayList userNumArray, ArrayList randNumArray) { + int strikeCnt = 0; + for(int i = 0; i < userNumArray.size(); i++){ + if(Objects.equals(userNumArray.get(i), randNumArray.get(i))){ + strikeCnt++; + } + } + return strikeCnt; + } + + // @Description("플레이어가 겹치지 않는 3개의 숫자를 입력해 순서대로 배열에 저장") static ArrayList makeUserNumArray() { Scanner scanner = new Scanner(System.in); String nStr = scanner.next(); // 3자리 숫자 입력 +// String nStr = "243"; char[] charArray = nStr.toCharArray(); ArrayList userNumArray = new ArrayList<>(); diff --git a/src/test/java/test.java b/src/test/java/test.java index d8f3706d..92323893 100644 --- a/src/test/java/test.java +++ b/src/test/java/test.java @@ -28,7 +28,7 @@ void makeRandNumArray(){ void makeUserNumArray() { Scanner scanner = new Scanner(System.in); // String nStr = scanner.next(); // 3자리 숫자 입력 - String nStr = "243"; // 테스트 케이스 + String nStr = "243"; char[] charArray = nStr.toCharArray(); ArrayList userNumArray = new ArrayList<>(); @@ -45,9 +45,9 @@ void makeUserNumArray() { for (Integer integer : userNumArray) { System.out.println(integer); } +// return userNumArray; } - @Description("플레이어가 입력한 숫자(현 배열)에서 중복된 문자가 있는지 판별") private boolean checkDuplicate(char[] charArray, char c) { int cnt = 0; for (char c1 : charArray) { @@ -56,4 +56,55 @@ private boolean checkDuplicate(char[] charArray, char c) { if(cnt > 1){ return true;} else{return false;} } + + @Test + @Description("플레이어가 입력한 숫자에 대한 결과 판별") + void showResult() { + ArrayList userNumArray = new ArrayList<>(List.of(1, 2, 3)); + ArrayList randNumArray = new ArrayList<>(List.of(2, 1, 3)); + + int strike = 0; + int ball = 0; + // 1. 스트라이크 개수 계산 + strike = countStrike(userNumArray, randNumArray); + // 2. 볼 개수 계산 + ball = countBall(userNumArray, randNumArray); + // 3. 같은 수가 전혀 없으면 낫싱이란 힌트 제공 + if(strike == 0 && ball == 0){ + System.out.println("nothing"); + } + // 같은 수 있는 경우 결과 제시 + else{ + System.out.println(strike + " strike " + ball + " ball"); + } + + if (strike == 3) { // 올 스트라이크 + System.out.println("You have guessed all 3 numbers correctly! Game finish!."); +// return true; + }else{ // 올 스트라이크가 아닌 경우 +// return false; + } + } + + @Description("볼 개수 계산") + private static int countBall(ArrayList userNumArray, ArrayList randNumArray) { + int ballCnt = 0; + for(int i = 0; i < userNumArray.size(); i++){ + if(randNumArray.contains(userNumArray.get(i)) && !Objects.equals(randNumArray.get(i), userNumArray.get(i))){ + ballCnt++; + } + } + return ballCnt; + } + + @Description("스트라이크 개수 계산") + private static int countStrike(ArrayList userNumArray, ArrayList randNumArray) { + int strikeCnt = 0; + for(int i = 0; i < userNumArray.size(); i++){ + if(Objects.equals(userNumArray.get(i), randNumArray.get(i))){ + strikeCnt++; + } + } + return strikeCnt; + } } From 4ed1a25ede078d7558ce4aeb09f453da7095d396 Mon Sep 17 00:00:00 2001 From: donghyuun Date: Wed, 1 May 2024 20:34:30 +0900 Subject: [PATCH 07/12] =?UTF-8?q?README.md=20=EC=88=98=EC=A0=95,=204.=20?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=9D=BC=EC=9D=B4=ED=81=AC=20=EC=8B=9C=20->?= =?UTF-8?q?=20=EC=8A=B9=EB=A6=AC=20=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 86c2ca54..739a9bbc 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ 2. 다른 자리에 있으면 볼 3. 같은 수가 전혀 없으면 낫싱이란 힌트 제공 -4. (스트라이크 시) 게임 재시작 여부 선택 +4. (승리 시) 게임 재시작 여부 선택 5. 유효값 검증 등 오류 처리(IllegalArgumentException) ### 기본 코드 구조 From 7d9f5cf0c65cca071969aded27e1263f7a202198 Mon Sep 17 00:00:00 2001 From: donghyuun Date: Sun, 5 May 2024 23:32:29 +0900 Subject: [PATCH 08/12] =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EA=B9=94=EB=81=94?= =?UTF-8?q?=ED=95=98=EA=B2=8C=20=EC=A0=95=EB=A6=AC,=20=EC=BD=98=EC=86=94?= =?UTF-8?q?=20=EB=AC=B8=EC=9E=A5=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/main.java | 104 ++++++++++++++++++++-------------------- src/test/java/test.java | 1 + 2 files changed, 54 insertions(+), 51 deletions(-) diff --git a/src/main/java/main.java b/src/main/java/main.java index 05e6fc2d..ba063983 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -3,47 +3,47 @@ import java.util.*; public class main { - public static void main(String[] args) { - try { - while(true){ - // 1. 컴퓨터가 랜덤으로 서로 다른 값 3개를 골라 순서대로 배열에 저장 - ArrayList randNumArray = makeRandNumArray(); - Boolean result = false; + public static void main(String[] args) { + while (true) { + // 1. 컴퓨터가 랜덤으로 서로 다른 값 3개를 골라 순서대로 배열에 저장 + ArrayList randNumArray = makeRandNumArray(); - while(!result){ - // 2. 사용자가 3개의 숫자 입력, 순서대로 배열에 저장 - ArrayList userNumArray = makeUserNumArray(); + Boolean result = false; - // 3. 게임 플레이어가 입력한 숫자에 대한 결과 판별 - result = showResult(userNumArray, randNumArray); - } + while (!result) { + // 2. 사용자가 3개의 숫자 입력, 순서대로 배열에 저장 + ArrayList userNumArray = makeUserNumArray(); - // 4. 게임 재시작 여부 선택 - int reStart = checkReStart(); - if(reStart == 2) break; + // 3. 게임 플레이어가 입력한 숫자에 대한 결과 판별 + result = showResult(userNumArray, randNumArray); } - } catch (IllegalArgumentException e) { - System.out.println("The entered value is invalid. The application will exit."); + // 4. 게임 재시작 여부 선택 + int reStart = checkReStart(); + if (reStart == 2) { + break; + } } } -// @Description("게임 재시작 여부를 선택") + // @Description("게임 재시작 여부를 선택") private static int checkReStart() { - System.out.println("Want to restart? 1(Yes), 2(No): "); + System.out.println("Want to restart game? 1(Yes), 2(No)"); Scanner scanner = new Scanner(System.in); int rst = scanner.nextInt(); - if (rst != 1 && rst != 2) throw new IllegalArgumentException(); - else{ + if (rst != 1 && rst != 2) { + throw new IllegalArgumentException(); + } else { return rst; } } // @Description("플레이어가 입력한 숫자에 대한 결과 판별") - private static Boolean showResult(ArrayList userNumArray, ArrayList randNumArray) { + private static Boolean showResult(ArrayList userNumArray, + ArrayList randNumArray) { int strike = 0; int ball = 0; // 1. 스트라이크 개수 계산 @@ -51,38 +51,40 @@ private static Boolean showResult(ArrayList userNumArray, ArrayList userNumArray, ArrayList randNumArray) { int ballCnt = 0; - for(int i = 0; i < userNumArray.size(); i++){ - if(randNumArray.contains(userNumArray.get(i)) && !Objects.equals(randNumArray.get(i), userNumArray.get(i))){ + for (int i = 0; i < userNumArray.size(); i++) { + if (randNumArray.contains(userNumArray.get(i)) && !Objects.equals(randNumArray.get(i), + userNumArray.get(i))) { ballCnt++; } } return ballCnt; } -// @Description("스트라이크 개수 계산") - private static int countStrike(ArrayList userNumArray, ArrayList randNumArray) { + // @Description("스트라이크 개수 계산") + private static int countStrike(ArrayList userNumArray, + ArrayList randNumArray) { int strikeCnt = 0; - for(int i = 0; i < userNumArray.size(); i++){ - if(Objects.equals(userNumArray.get(i), randNumArray.get(i))){ + for (int i = 0; i < userNumArray.size(); i++) { + if (Objects.equals(userNumArray.get(i), randNumArray.get(i))) { strikeCnt++; } } @@ -92,51 +94,51 @@ private static int countStrike(ArrayList userNumArray, ArrayList makeUserNumArray() { Scanner scanner = new Scanner(System.in); + System.out.print("please enter number: "); String nStr = scanner.next(); // 3자리 숫자 입력 -// String nStr = "243"; char[] charArray = nStr.toCharArray(); ArrayList userNumArray = new ArrayList<>(); for (char c : charArray) { - if(checkDuplicate(charArray, c)){ // 중복인 경우 에러 발생시킴 + if (checkDuplicate(charArray, c) || charArray.length != 3) { // 중복인 경우 에러 발생시킴 throw new IllegalArgumentException(); - } - else{ + } else { userNumArray.add(Integer.parseInt(String.valueOf(c))); } } - for (Integer integer : userNumArray) { - System.out.println(integer); - } - return userNumArray; } -// @Description("플레이어가 입력한 숫자(현 배열)에서 중복된 문자가 있는지 판별") + // @Description("플레이어가 입력한 숫자(현 배열)에서 중복된 문자가 있는지 판별") private static boolean checkDuplicate(char[] charArray, char c) { int cnt = 0; for (char c1 : charArray) { - if(c1 == c){cnt++;} + if (c1 == c) { + cnt++; + } + } + if (cnt > 1) { + return true; + } else { + return false; } - if(cnt > 1){ return true;} - else{return false;} } -// @Description("컴퓨터가 랜덤으로 겹치지 않는 3개의 숫자를 뽑아 순서대로 배열에 저장") - public static ArrayList makeRandNumArray(){ + // @Description("컴퓨터가 랜덤으로 겹치지 않는 3개의 숫자를 뽑아 순서대로 배열에 저장") + public static ArrayList makeRandNumArray() { ArrayList numArray = new ArrayList<>(); - while(numArray.size() < 3){ + while (numArray.size() < 3) { Random random = new Random(); - int n = random.nextInt(8); // 0~8 난수 생성 + int n = random.nextInt(8) + 1; // 1~9 난수 생성 - if(!numArray.contains(n)) { // 배열에 없는 경우 숫자 추가 + if (!numArray.contains(n)) { // 배열에 없는 경우 숫자 추가 numArray.add(n); - System.out.println("rand num = " + n); } } + System.out.println(); return numArray; } } \ No newline at end of file diff --git a/src/test/java/test.java b/src/test/java/test.java index 92323893..87a326e6 100644 --- a/src/test/java/test.java +++ b/src/test/java/test.java @@ -48,6 +48,7 @@ void makeUserNumArray() { // return userNumArray; } +// @Description("플레이어가 입력한 숫자(현 배열)에서 중복된 문자가 있는지 판별") private boolean checkDuplicate(char[] charArray, char c) { int cnt = 0; for (char c1 : charArray) { From 5e645e0364b75485155bd160fc63de74c828de7a Mon Sep 17 00:00:00 2001 From: donghyuun Date: Mon, 6 May 2024 12:37:14 +0900 Subject: [PATCH 09/12] =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=ED=81=AC,=20=EB=B3=BC=20=EA=B0=9C=EC=88=98=20=EC=9C=A0?= =?UTF-8?q?=ED=9A=A8=EC=84=B1=20=ED=85=8C=EC=8A=A4=ED=8A=B8=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/test/java/test.java | 29 +++++++---------------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/src/test/java/test.java b/src/test/java/test.java index 87a326e6..b3a56b3f 100644 --- a/src/test/java/test.java +++ b/src/test/java/test.java @@ -1,5 +1,6 @@ import jdk.jfr.Description; import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.*; import java.util.*; @@ -48,7 +49,7 @@ void makeUserNumArray() { // return userNumArray; } -// @Description("플레이어가 입력한 숫자(현 배열)에서 중복된 문자가 있는지 판별") + @Description("플레이어가 입력한 숫자(현 배열)에서 중복된 문자가 있는지 판별") private boolean checkDuplicate(char[] charArray, char c) { int cnt = 0; for (char c1 : charArray) { @@ -64,27 +65,10 @@ void showResult() { ArrayList userNumArray = new ArrayList<>(List.of(1, 2, 3)); ArrayList randNumArray = new ArrayList<>(List.of(2, 1, 3)); - int strike = 0; - int ball = 0; - // 1. 스트라이크 개수 계산 - strike = countStrike(userNumArray, randNumArray); - // 2. 볼 개수 계산 - ball = countBall(userNumArray, randNumArray); - // 3. 같은 수가 전혀 없으면 낫싱이란 힌트 제공 - if(strike == 0 && ball == 0){ - System.out.println("nothing"); - } - // 같은 수 있는 경우 결과 제시 - else{ - System.out.println(strike + " strike " + ball + " ball"); - } - - if (strike == 3) { // 올 스트라이크 - System.out.println("You have guessed all 3 numbers correctly! Game finish!."); -// return true; - }else{ // 올 스트라이크가 아닌 경우 -// return false; - } + // 1. 스트라이크 개수 정상 확인 + assertThat(countStrike(userNumArray, randNumArray)).isEqualTo(1) ; + // 2. 볼 개수 정상 확인 + assertThat(countBall(userNumArray, randNumArray)).isEqualTo(2) ; } @Description("볼 개수 계산") @@ -108,4 +92,5 @@ private static int countStrike(ArrayList userNumArray, ArrayList Date: Mon, 6 May 2024 15:58:22 +0900 Subject: [PATCH 10/12] =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EB=B3=84=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EC=83=9D=EC=84=B1=20=EB=B0=8F=20=EA=B8=B0?= =?UTF-8?q?=EC=A1=B4=20=ED=8C=8C=EC=9D=BC=20=EB=B6=84=EB=B0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 4 + src/main/java/domain/Computer.java | 24 ++++++ src/main/java/domain/User.java | 30 +++++++ src/main/java/main.java | 130 +++-------------------------- src/main/java/utils/Utils.java | 88 +++++++++++++++++++ 5 files changed, 156 insertions(+), 120 deletions(-) create mode 100644 src/main/java/domain/Computer.java create mode 100644 src/main/java/domain/User.java create mode 100644 src/main/java/utils/Utils.java diff --git a/build.gradle b/build.gradle index 20a92c9e..b97ff65c 100644 --- a/build.gradle +++ b/build.gradle @@ -23,3 +23,7 @@ dependencies { test { useJUnitPlatform() } + +tasks.withType(JavaCompile).configureEach { + options.encoding = 'UTF-8' +} \ No newline at end of file diff --git a/src/main/java/domain/Computer.java b/src/main/java/domain/Computer.java new file mode 100644 index 00000000..4604a002 --- /dev/null +++ b/src/main/java/domain/Computer.java @@ -0,0 +1,24 @@ +package domain; + +import jdk.jfr.Description; + +import java.util.ArrayList; +import java.util.Random; + +public class Computer { + + @Description("컴퓨터가 랜덤으로 겹치지 않는 3개의 숫자를 뽑아 순서대로 배열에 저장") + public static ArrayList makeRandNumArray() { + ArrayList numArray = new ArrayList<>(); + while (numArray.size() < 3) { + Random random = new Random(); + int n = random.nextInt(8) + 1; // 1~9 난수 생성 + + if (!numArray.contains(n)) { // 배열에 없는 경우 숫자 추가 + numArray.add(n); + } + } + System.out.println(); + return numArray; + } +} diff --git a/src/main/java/domain/User.java b/src/main/java/domain/User.java new file mode 100644 index 00000000..d8f6c416 --- /dev/null +++ b/src/main/java/domain/User.java @@ -0,0 +1,30 @@ +package domain; + +import jdk.jfr.Description; +import utils.Utils; + +import java.util.ArrayList; +import java.util.Scanner; + +public class User { + + @Description("플레이어가 겹치지 않는 3개의 숫자를 입력해 순서대로 배열에 저장") + public static ArrayList inputNumArray() { + Scanner scanner = new Scanner(System.in); + System.out.print("숫자를 입력해 주세요 : "); + String nStr = scanner.next(); // 3자리 숫자 입력 + + char[] charArray = nStr.toCharArray(); + ArrayList userNumArray = new ArrayList<>(); + + for (char c : charArray) { + if (Utils.checkDuplicate(charArray, c) || charArray.length != 3) { // 중복인 경우 에러 발생시킴 + throw new IllegalArgumentException("잘못된 값이 입력되었습니다. 프로그램을 종료합니다."); + } else { + userNumArray.add(Integer.parseInt(String.valueOf(c))); + } + } + + return userNumArray; + } +} diff --git a/src/main/java/main.java b/src/main/java/main.java index ba063983..b3724653 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -1,144 +1,34 @@ +import domain.Computer; +import domain.User; import jdk.jfr.Description; +import jdk.jshell.execution.Util; +import utils.Utils; import java.util.*; public class main { - public static void main(String[] args) { + while (true) { // 1. 컴퓨터가 랜덤으로 서로 다른 값 3개를 골라 순서대로 배열에 저장 - ArrayList randNumArray = makeRandNumArray(); + ArrayList randNumArray = Computer.makeRandNumArray(); - Boolean result = false; + boolean result = false; while (!result) { // 2. 사용자가 3개의 숫자 입력, 순서대로 배열에 저장 - ArrayList userNumArray = makeUserNumArray(); + ArrayList userNumArray = User.inputNumArray(); // 3. 게임 플레이어가 입력한 숫자에 대한 결과 판별 - result = showResult(userNumArray, randNumArray); + result = Utils.showResult(userNumArray, randNumArray); } // 4. 게임 재시작 여부 선택 - int reStart = checkReStart(); + int reStart = Utils.checkReStart(); if (reStart == 2) { break; } } } - - // @Description("게임 재시작 여부를 선택") - private static int checkReStart() { - System.out.println("Want to restart game? 1(Yes), 2(No)"); - Scanner scanner = new Scanner(System.in); - int rst = scanner.nextInt(); - - if (rst != 1 && rst != 2) { - throw new IllegalArgumentException(); - } else { - return rst; - } - } - - // @Description("플레이어가 입력한 숫자에 대한 결과 판별") - private static Boolean showResult(ArrayList userNumArray, - ArrayList randNumArray) { - int strike = 0; - int ball = 0; - // 1. 스트라이크 개수 계산 - strike = countStrike(userNumArray, randNumArray); - // 2. 볼 개수 계산 - ball = countBall(userNumArray, randNumArray); - // 3. 같은 수가 전혀 없으면 낫싱이란 힌트 제공 - if (strike == 0 && ball == 0) { - System.out.println("nothing"); - } - // 같은 수 있는 경우 결과 제시 - else { - System.out.println(strike + " strike " + ball + " ball"); - } - - if (strike == 3) { // 올 스트라이크 - System.out.println("You have guessed all 3 numbers correctly! Game finish!"); - return true; - } else { // 올 스트라이크가 아닌 경우 - return false; - } - } - - // @Description("볼 개수 계산") - private static int countBall(ArrayList userNumArray, ArrayList randNumArray) { - int ballCnt = 0; - for (int i = 0; i < userNumArray.size(); i++) { - if (randNumArray.contains(userNumArray.get(i)) && !Objects.equals(randNumArray.get(i), - userNumArray.get(i))) { - ballCnt++; - } - } - return ballCnt; - } - - // @Description("스트라이크 개수 계산") - private static int countStrike(ArrayList userNumArray, - ArrayList randNumArray) { - int strikeCnt = 0; - for (int i = 0; i < userNumArray.size(); i++) { - if (Objects.equals(userNumArray.get(i), randNumArray.get(i))) { - strikeCnt++; - } - } - return strikeCnt; - } - - // @Description("플레이어가 겹치지 않는 3개의 숫자를 입력해 순서대로 배열에 저장") - static ArrayList makeUserNumArray() { - Scanner scanner = new Scanner(System.in); - System.out.print("please enter number: "); - String nStr = scanner.next(); // 3자리 숫자 입력 - - char[] charArray = nStr.toCharArray(); - ArrayList userNumArray = new ArrayList<>(); - - for (char c : charArray) { - if (checkDuplicate(charArray, c) || charArray.length != 3) { // 중복인 경우 에러 발생시킴 - throw new IllegalArgumentException(); - } else { - userNumArray.add(Integer.parseInt(String.valueOf(c))); - } - } - - return userNumArray; - } - - // @Description("플레이어가 입력한 숫자(현 배열)에서 중복된 문자가 있는지 판별") - private static boolean checkDuplicate(char[] charArray, char c) { - int cnt = 0; - for (char c1 : charArray) { - if (c1 == c) { - cnt++; - } - } - if (cnt > 1) { - return true; - } else { - return false; - } - } - - - // @Description("컴퓨터가 랜덤으로 겹치지 않는 3개의 숫자를 뽑아 순서대로 배열에 저장") - public static ArrayList makeRandNumArray() { - ArrayList numArray = new ArrayList<>(); - while (numArray.size() < 3) { - Random random = new Random(); - int n = random.nextInt(8) + 1; // 1~9 난수 생성 - - if (!numArray.contains(n)) { // 배열에 없는 경우 숫자 추가 - numArray.add(n); - } - } - System.out.println(); - return numArray; - } } \ No newline at end of file diff --git a/src/main/java/utils/Utils.java b/src/main/java/utils/Utils.java new file mode 100644 index 00000000..a49f737c --- /dev/null +++ b/src/main/java/utils/Utils.java @@ -0,0 +1,88 @@ +package utils; + +import jdk.jfr.Description; + +import java.util.ArrayList; +import java.util.Objects; +import java.util.Scanner; + +public class Utils { + + @Description("플레이어가 입력한 숫자(현 배열)에서 중복된 문자가 있는지 판별") + public static boolean checkDuplicate(char[] charArray, char c) { + int cnt = 0; + for (char c1 : charArray) { + if (c1 == c) { + cnt++; + } + } + if (cnt > 1) { + return true; + } else { + return false; + } + } + + @Description("플레이어가 입력한 숫자에 대한 결과 판별") + public static Boolean showResult(ArrayList userNumArray, + ArrayList randNumArray) { + int strike = 0; + int ball = 0; + // 1. 스트라이크 개수 계산 + strike = Utils.countStrike(userNumArray, randNumArray); + // 2. 볼 개수 계산 + ball = Utils.countBall(userNumArray, randNumArray); + // 3. 같은 수가 전혀 없으면 낫싱이란 힌트 제공 + if (strike == 0 && ball == 0) { + System.out.println("낫싱"); + } + // 같은 수 있는 경우 결과 제시 + else { + System.out.println(ball + " 볼 " + strike + " 스트라이크"); + } + + if (strike == 3) { // 올 스트라이크 + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + return true; + } else { // 올 스트라이크가 아닌 경우 + return false; + } + } + + @Description("볼 개수 계산") + public static int countBall(ArrayList userNumArray, ArrayList randNumArray) { + int ballCnt = 0; + for (int i = 0; i < userNumArray.size(); i++) { + if (randNumArray.contains(userNumArray.get(i)) && !Objects.equals(randNumArray.get(i), + userNumArray.get(i))) { + ballCnt++; + } + } + return ballCnt; + } + + @Description("스트라이크 개수 계산") + public static int countStrike(ArrayList userNumArray, + ArrayList randNumArray) { + int strikeCnt = 0; + for (int i = 0; i < userNumArray.size(); i++) { + if (Objects.equals(userNumArray.get(i), randNumArray.get(i))) { + strikeCnt++; + } + } + return strikeCnt; + } + + @Description("게임 재시작 여부를 선택") + public static int checkReStart() { + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + Scanner scanner = new Scanner(System.in); + int rst = scanner.nextInt(); + + if (rst != 1 && rst != 2) { + throw new IllegalArgumentException("잘못된 값이 입력되었습니다. 프로그램을 종료합니다."); + } else { + return rst; + } + } +} From 97865ef05b6351ffa8a0fd23b0e45d270cadee43 Mon Sep 17 00:00:00 2001 From: donghyuun Date: Mon, 6 May 2024 16:07:46 +0900 Subject: [PATCH 11/12] =?UTF-8?q?Java=20doc=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Computer.java | 5 ++++- src/main/java/domain/User.java | 6 ++++- src/main/java/utils/Utils.java | 35 +++++++++++++++++++++++++----- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/src/main/java/domain/Computer.java b/src/main/java/domain/Computer.java index 4604a002..70a19d7c 100644 --- a/src/main/java/domain/Computer.java +++ b/src/main/java/domain/Computer.java @@ -7,7 +7,10 @@ public class Computer { - @Description("컴퓨터가 랜덤으로 겹치지 않는 3개의 숫자를 뽑아 순서대로 배열에 저장") + /** + * 컴퓨터가 랜덤으로 겹치지 않는 3개의 숫자를 뽑아 순서대로 배열에 저장 + * @return 컴퓨터가 입력한 숫자들이 담긴 배열 + */ public static ArrayList makeRandNumArray() { ArrayList numArray = new ArrayList<>(); while (numArray.size() < 3) { diff --git a/src/main/java/domain/User.java b/src/main/java/domain/User.java index d8f6c416..d3db37d2 100644 --- a/src/main/java/domain/User.java +++ b/src/main/java/domain/User.java @@ -8,7 +8,11 @@ public class User { - @Description("플레이어가 겹치지 않는 3개의 숫자를 입력해 순서대로 배열에 저장") + /** + * 플레이어가 겹치지 않는 3개의 숫자를 입력해 순서대로 배열에 저장 + * 내부적으로 유효한 값이 입력되었는지 검사 + * @return 플레이어가 입력한 숫자들이 담긴 배열 + */ public static ArrayList inputNumArray() { Scanner scanner = new Scanner(System.in); System.out.print("숫자를 입력해 주세요 : "); diff --git a/src/main/java/utils/Utils.java b/src/main/java/utils/Utils.java index a49f737c..a905c65e 100644 --- a/src/main/java/utils/Utils.java +++ b/src/main/java/utils/Utils.java @@ -8,7 +8,12 @@ public class Utils { - @Description("플레이어가 입력한 숫자(현 배열)에서 중복된 문자가 있는지 판별") + /** + * 플레이어가 입력한 숫자(현 배열)에서 중복된 문자가 있는지 판별 + * @param charArray 중복을 검사할 배열 + * @param c 해당 배열 내 존재하는 문자, 중복을 확인할 대상 + * @return true: 중복 O, false: 중복 X + */ public static boolean checkDuplicate(char[] charArray, char c) { int cnt = 0; for (char c1 : charArray) { @@ -23,7 +28,13 @@ public static boolean checkDuplicate(char[] charArray, char c) { } } - @Description("플레이어가 입력한 숫자에 대한 결과 판별") + /** + * 플레이어가 입력한 숫자에 대한 결과 판별 + * @param userNumArray 컴퓨터가 입력한 숫자배열 + * @param randNumArray 사용자가 입력한 숫자 배열 + * 일치 여부를 반별하여 볼, 스트라이크 개수를 출력함 + * @return true: 3 스트라이크, 게임 종료, false: 3 스트라이크가 아닌 경우 + */ public static Boolean showResult(ArrayList userNumArray, ArrayList randNumArray) { int strike = 0; @@ -49,7 +60,12 @@ public static Boolean showResult(ArrayList userNumArray, } } - @Description("볼 개수 계산") + /** + * 볼의 개수를 계산하여 반환 + * @param userNumArray + * @param randNumArray + * @return 볼 개수 + */ public static int countBall(ArrayList userNumArray, ArrayList randNumArray) { int ballCnt = 0; for (int i = 0; i < userNumArray.size(); i++) { @@ -61,7 +77,12 @@ public static int countBall(ArrayList userNumArray, ArrayList return ballCnt; } - @Description("스트라이크 개수 계산") + /** + * 스트라이크의 개수를 계산하여 반환 + * @param userNumArray + * @param randNumArray + * @return 스트라이크 개수 + */ public static int countStrike(ArrayList userNumArray, ArrayList randNumArray) { int strikeCnt = 0; @@ -73,7 +94,11 @@ public static int countStrike(ArrayList userNumArray, return strikeCnt; } - @Description("게임 재시작 여부를 선택") + /** + * 게임이 종료되었을 때 호출되어 게임 재시작 여부를 물음 + * @return 1: 게임 재시작, 2: 게임 종료, + * @throws : 잘못된 값이 입력된 경우 + */ public static int checkReStart() { System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); Scanner scanner = new Scanner(System.in); From 82377c469d7fad50e0d08699002d18afb5500450 Mon Sep 17 00:00:00 2001 From: donghyuun Date: Mon, 6 May 2024 16:41:17 +0900 Subject: [PATCH 12/12] =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/test.java | 76 +++++++++++++---------------------------- 1 file changed, 24 insertions(+), 52 deletions(-) diff --git a/src/test/java/test.java b/src/test/java/test.java index b3a56b3f..597b73d9 100644 --- a/src/test/java/test.java +++ b/src/test/java/test.java @@ -1,5 +1,9 @@ +import domain.Computer; import jdk.jfr.Description; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import utils.Utils; + import static org.assertj.core.api.Assertions.*; import java.util.*; @@ -7,26 +11,17 @@ public class test { @Test - @Description("컴퓨터가 랜덤으로 겹치지 않는 3개의 숫자를 뽑아 순서대로 배열에 저장") - void makeRandNumArray(){ - ArrayList numArray = new ArrayList<>(); - while(numArray.size() < 3){ - Random random = new Random(); - // 1~9 난수 생성 - int n = random.nextInt(8) + 1; - // 배열에 없는 경우 숫자 추가 - if(!numArray.contains(n)) { - numArray.add(n); - } - } + @DisplayName("컴퓨터가 랜덤으로 겹치지 않는 3개의 숫자를 뽑아 순서대로 배열에 저장") + void compRandNumArrayTest(){ + ArrayList numArray = Computer.makeRandNumArray(); for (Integer integer : numArray) { - System.out.println(integer); + System.out.print(integer); } } @Test - @Description("플레이어가 겹치지 않는 3개의 숫자를 입력해 순서대로 배열에 저장") - void makeUserNumArray() { + @DisplayName("플레이어가 겹치지 않는 3개의 숫자를 입력해 순서대로 배열에 저장") + void userInputNumArrayTest() { Scanner scanner = new Scanner(System.in); // String nStr = scanner.next(); // 3자리 숫자 입력 String nStr = "243"; @@ -35,7 +30,7 @@ void makeUserNumArray() { ArrayList userNumArray = new ArrayList<>(); for (char c : charArray) { - if(checkDuplicate(charArray, c)){ // 중복인 경우 에러 발생시킴 + if(Utils.checkDuplicate(charArray, c)){ // 중복인 경우 에러 발생시킴 throw new IllegalArgumentException(); } else{ @@ -44,53 +39,30 @@ void makeUserNumArray() { } for (Integer integer : userNumArray) { - System.out.println(integer); + System.out.print(integer); } -// return userNumArray; } - - @Description("플레이어가 입력한 숫자(현 배열)에서 중복된 문자가 있는지 판별") - private boolean checkDuplicate(char[] charArray, char c) { - int cnt = 0; - for (char c1 : charArray) { - if(c1 == c){cnt++;} - } - if(cnt > 1){ return true;} - else{return false;} + @Test + @DisplayName("플레이어가 입력한 숫자(현 배열)에서 중복된 문자가 있는지 판별") + void checkDuplicateTest() { + boolean b1 = Utils.checkDuplicate(new char[]{'1', '3', '4'}, '1'); + assertThat(b1).isEqualTo(false); + boolean b2 = Utils.checkDuplicate(new char[]{'1', '3', '3'}, '3'); + assertThat(b2).isEqualTo(true); } @Test - @Description("플레이어가 입력한 숫자에 대한 결과 판별") + @DisplayName("플레이어가 입력한 숫자에 대한 결과 판별") void showResult() { ArrayList userNumArray = new ArrayList<>(List.of(1, 2, 3)); ArrayList randNumArray = new ArrayList<>(List.of(2, 1, 3)); // 1. 스트라이크 개수 정상 확인 - assertThat(countStrike(userNumArray, randNumArray)).isEqualTo(1) ; + int strikeNum = Utils.countStrike(userNumArray, randNumArray); + assertThat(strikeNum).isEqualTo(1); // 2. 볼 개수 정상 확인 - assertThat(countBall(userNumArray, randNumArray)).isEqualTo(2) ; - } - - @Description("볼 개수 계산") - private static int countBall(ArrayList userNumArray, ArrayList randNumArray) { - int ballCnt = 0; - for(int i = 0; i < userNumArray.size(); i++){ - if(randNumArray.contains(userNumArray.get(i)) && !Objects.equals(randNumArray.get(i), userNumArray.get(i))){ - ballCnt++; - } - } - return ballCnt; - } - - @Description("스트라이크 개수 계산") - private static int countStrike(ArrayList userNumArray, ArrayList randNumArray) { - int strikeCnt = 0; - for(int i = 0; i < userNumArray.size(); i++){ - if(Objects.equals(userNumArray.get(i), randNumArray.get(i))){ - strikeCnt++; - } - } - return strikeCnt; + int ballNum = Utils.countBall(userNumArray, randNumArray); + assertThat(ballNum).isEqualTo(2) ; } }