From c4001591d0d05934febdc0ca635fbd267efe3325 Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 08:08:57 +0900 Subject: [PATCH 01/16] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EC=97=90?= =?UTF-8?q?=EA=B2=8C=20=EC=9E=85=EB=A0=A5=EB=B0=9B=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 --- README.md | 12 +++++++++++- src/main/java/Applicaiton.java | 5 +++++ src/main/java/Util.java | 11 +++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/main/java/Applicaiton.java create mode 100644 src/main/java/Util.java diff --git a/README.md b/README.md index 8d7e8aee..72097b38 100644 --- a/README.md +++ b/README.md @@ -1 +1,11 @@ -# java-baseball-precourse \ No newline at end of file +# java-baseball-precourse + +구현할 기능 + +- 사용자에게 값을 입력받는 기능 +- 사용자가 맞출 3자리 숫자를 생성하는 기능 +- 사용자의 입력값과 답 사이에 스트라이크가 몇개인지 계산하는 기능 +- 사용자의 입력값과 답 사이에 볼이 몇개인지 계산하는 기능 +- 사용자의 입력값과 답 사이에 낫싱인지 계산하는 기능 +- 사용자의 잘못된 입력값에 대해 IllegalArgumentException을 처리하는 기능 +- 사용자가 답을 맞춘 후에 계속해서 겜을 다시할지 겜을 종료할지 선택을 받고 처리하는 기능 diff --git a/src/main/java/Applicaiton.java b/src/main/java/Applicaiton.java new file mode 100644 index 00000000..f8042448 --- /dev/null +++ b/src/main/java/Applicaiton.java @@ -0,0 +1,5 @@ +public class Applicaiton { + public static void main(String[] args) { + + } +} diff --git a/src/main/java/Util.java b/src/main/java/Util.java new file mode 100644 index 00000000..fe614b08 --- /dev/null +++ b/src/main/java/Util.java @@ -0,0 +1,11 @@ +import java.util.Scanner; + +public class Util { + public int getInput() { + System.out.println("숫자를 입력해 주세요"); + int input; + Scanner scan = new Scanner(System.in); + input = scan.nextInt(); + return input; + } +} From 063fed1d484fdf0b924e71b5f38fb692fceaf7db Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 08:29:04 +0900 Subject: [PATCH 02/16] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EA=B0=80=20?= =?UTF-8?q?=EB=A7=9E=EC=B6=9C=203=EC=9E=90=EB=A6=AC=20=EC=88=AB=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=EC=83=9D=EC=84=B1=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/Applicaiton.java | 2 +- src/main/java/Baseball.java | 11 +++++++++++ src/main/java/Util.java | 31 ++++++++++++++++++++++++++++++- 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 src/main/java/Baseball.java diff --git a/src/main/java/Applicaiton.java b/src/main/java/Applicaiton.java index f8042448..7ffb70f9 100644 --- a/src/main/java/Applicaiton.java +++ b/src/main/java/Applicaiton.java @@ -1,5 +1,5 @@ public class Applicaiton { public static void main(String[] args) { - + Baseball.play(); } } diff --git a/src/main/java/Baseball.java b/src/main/java/Baseball.java new file mode 100644 index 00000000..c220cfc1 --- /dev/null +++ b/src/main/java/Baseball.java @@ -0,0 +1,11 @@ +public class Baseball { + //야구 게임 시작 + public static void play(){ + Util myutil = new Util(); + int answer = myutil.generateAnswer(); //숫자 3자리를 생산해냄 + int input; + while (true) { + input = myutil.getInput(); //사용자의 입력값을 받음. + } + } +} diff --git a/src/main/java/Util.java b/src/main/java/Util.java index fe614b08..5fa07dac 100644 --- a/src/main/java/Util.java +++ b/src/main/java/Util.java @@ -1,11 +1,40 @@ +import java.util.Random; import java.util.Scanner; public class Util { - public int getInput() { + public int getInput() { //사용자의 입력을 받는 함수 System.out.println("숫자를 입력해 주세요"); int input; Scanner scan = new Scanner(System.in); input = scan.nextInt(); return input; } + + public int generateAnswer(){ // 숫자 3자리를 만들어내는 함수 + Random random =new Random(); + int [] Answer = new int[3]; // 사용자가 맞춰야 하는 정답을 담는 int 배열 + int temp; + Answer[0]=random.nextInt(8)+1; // 첫 값이 0이 올 수 없으므로 값은 이렇게 지정 + + while(true) { //두번째 값은 1번째 값과 다른 값이 오게끔 + temp = random.nextInt(9); + if (Answer[0] == temp) + continue; + else + break; + } + Answer[1] = temp; + + while(true) { //세번째 값은 1,2번째 값과 다른 값이 오게끔 + temp = random.nextInt(9); + if (Answer[0] == temp || Answer[1] == temp) + continue; + else + break; + } + Answer[2] = temp; + + String str = ""+Answer[0]+Answer[1]+Answer[2]; // + return Integer.parseInt(str); + } } From e8f2f4f0572376f679459fd848a7f6731218baa6 Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 09:25:43 +0900 Subject: [PATCH 03/16] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EC=9D=98=20?= =?UTF-8?q?=EC=9E=98=EB=AA=BB=EB=90=9C=20=EC=9E=85=EB=A0=A5=EA=B0=92?= =?UTF-8?q?=EC=97=90=20=EB=8C=80=ED=95=B4=20=EC=98=88=EC=99=B8=EB=A5=BC=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++-- src/main/java/Baseball.java | 10 ++++++++-- src/main/java/Util.java | 11 +++++++++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 72097b38..c4c7a5cd 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,10 @@ 구현할 기능 - 사용자에게 값을 입력받는 기능 -- 사용자가 맞출 3자리 숫자를 생성하는 기능 +- 사용자가 맞출 3자리 숫자를 생성하는 기능 +- 사용자의 입력값이 중복되지 않은 값인지 판단하는 기능. +- 사용자의 잘못된 입력값에 대해 IllegalArgumentException을 처리하는 기능 - 사용자의 입력값과 답 사이에 스트라이크가 몇개인지 계산하는 기능 - 사용자의 입력값과 답 사이에 볼이 몇개인지 계산하는 기능 - 사용자의 입력값과 답 사이에 낫싱인지 계산하는 기능 -- 사용자의 잘못된 입력값에 대해 IllegalArgumentException을 처리하는 기능 - 사용자가 답을 맞춘 후에 계속해서 겜을 다시할지 겜을 종료할지 선택을 받고 처리하는 기능 diff --git a/src/main/java/Baseball.java b/src/main/java/Baseball.java index c220cfc1..dcd7eea7 100644 --- a/src/main/java/Baseball.java +++ b/src/main/java/Baseball.java @@ -1,11 +1,17 @@ public class Baseball { - //야구 게임 시작 + //야구 게임 전반적인 흐름을 처리 public static void play(){ Util myutil = new Util(); int answer = myutil.generateAnswer(); //숫자 3자리를 생산해냄 int input; while (true) { - input = myutil.getInput(); //사용자의 입력값을 받음. + try { + input = myutil.getInput(); //사용자의 입력값을 받음. + } catch (IllegalArgumentException e){ + System.out.println(e.getMessage()); + break; + } + } } } diff --git a/src/main/java/Util.java b/src/main/java/Util.java index 5fa07dac..53670afc 100644 --- a/src/main/java/Util.java +++ b/src/main/java/Util.java @@ -2,14 +2,20 @@ import java.util.Scanner; public class Util { - public int getInput() { //사용자의 입력을 받는 함수 + public int getInput() throws IllegalArgumentException{ //사용자의 입력을 받는 함수 System.out.println("숫자를 입력해 주세요"); int input; Scanner scan = new Scanner(System.in); - input = scan.nextInt(); + + try { //사용자의 입력이 올바르지 않으면 IllegalArgumentException을 던짐 + input = scan.nextInt(); + }catch(Exception e){ + throw new IllegalArgumentException("잘못된 값을 입력하였습니다"); + } return input; } + public int generateAnswer(){ // 숫자 3자리를 만들어내는 함수 Random random =new Random(); int [] Answer = new int[3]; // 사용자가 맞춰야 하는 정답을 담는 int 배열 @@ -37,4 +43,5 @@ public int generateAnswer(){ // 숫자 3자리를 만들어내는 함수 String str = ""+Answer[0]+Answer[1]+Answer[2]; // return Integer.parseInt(str); } + } From 1554f674c62c2b1c792ac2858ca25aa2e0f6a243 Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 09:27:27 +0900 Subject: [PATCH 04/16] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EC=9D=98=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EA=B0=92=EC=9D=B4=20=EC=A4=91=EB=B3=B5?= =?UTF-8?q?=EB=90=98=EC=A7=80=20=EC=95=8A=EC=9D=80=20=EA=B0=92=EC=9D=B8?= =?UTF-8?q?=EC=A7=80=20=ED=8C=90=EB=8B=A8=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Util.java | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/Util.java b/src/main/java/Util.java index 53670afc..536e8075 100644 --- a/src/main/java/Util.java +++ b/src/main/java/Util.java @@ -7,14 +7,33 @@ public int getInput() throws IllegalArgumentException{ //사용자의 입력을 int input; Scanner scan = new Scanner(System.in); - try { //사용자의 입력이 올바르지 않으면 IllegalArgumentException을 던짐 + try { //사용자의 입력이 올바르지 않으면 IllegalArgumentException 던짐 input = scan.nextInt(); }catch(Exception e){ throw new IllegalArgumentException("잘못된 값을 입력하였습니다"); } - return input; + + boolean isContinue = isValid(input); //사용자의 입력이 중복되지 않은 숫자들로 이루어져 있는지 판단 + if (isContinue) + return input; //올바르면 input을 넘김 + else + throw new IllegalArgumentException("잘못된 값을 입력하였습니다"); //그렇지 않으면 IllegalArgumentException 던지기 } + public boolean isValid(int input){ // 사용자의 입력이 중복되지 않은 숫자들인지 판단하는 함수 + String str = Integer.toString(input); + if(str.length() != 3) + return false; + int[] arr = new int[3]; + arr[0] =Character.getNumericValue(str.charAt(0)); + arr[1] =Character.getNumericValue(str.charAt(1)); + arr[2] =Character.getNumericValue(str.charAt(2)); + + if (arr[0] != arr[1] && arr[0] != arr[2] && arr[1] != arr[2]) //세 숫자가 모두 다른 경우는 정상 + return true; + else + return false; + } public int generateAnswer(){ // 숫자 3자리를 만들어내는 함수 Random random =new Random(); From cbf663791b98331bad71ec3ef04492fd4b8594d3 Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 10:25:28 +0900 Subject: [PATCH 05/16] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EC=9D=98=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EA=B0=92=EC=9D=B4=20=EB=8B=B5=EC=9D=84=20?= =?UTF-8?q?=EB=A7=9E=EC=B7=84=EB=8A=94=EC=A7=80=20=ED=99=95=EC=9D=B8?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +-- src/main/java/Applicaiton.java | 9 +++- src/main/java/Baseball.java | 23 +++++++--- src/main/java/GenerateAnswer.java | 31 ++++++++++++++ src/main/java/Input.java | 36 ++++++++++++++++ src/main/java/Util.java | 71 +++++++++---------------------- 6 files changed, 116 insertions(+), 59 deletions(-) create mode 100644 src/main/java/GenerateAnswer.java create mode 100644 src/main/java/Input.java diff --git a/README.md b/README.md index c4c7a5cd..47d20d19 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ - 사용자가 맞출 3자리 숫자를 생성하는 기능 - 사용자의 입력값이 중복되지 않은 값인지 판단하는 기능. - 사용자의 잘못된 입력값에 대해 IllegalArgumentException을 처리하는 기능 -- 사용자의 입력값과 답 사이에 스트라이크가 몇개인지 계산하는 기능 -- 사용자의 입력값과 답 사이에 볼이 몇개인지 계산하는 기능 -- 사용자의 입력값과 답 사이에 낫싱인지 계산하는 기능 +- 사용자의 입력값이 답을 맞췄는지 확인하는 기능 +- 사용자의 입력값과 답 간에 비교하여 결과를 판단하는 기능 - 사용자가 답을 맞춘 후에 계속해서 겜을 다시할지 겜을 종료할지 선택을 받고 처리하는 기능 diff --git a/src/main/java/Applicaiton.java b/src/main/java/Applicaiton.java index 7ffb70f9..0cff6afe 100644 --- a/src/main/java/Applicaiton.java +++ b/src/main/java/Applicaiton.java @@ -1,5 +1,12 @@ public class Applicaiton { public static void main(String[] args) { - Baseball.play(); + while(true) { + boolean again; //사용자가 답을 맞춘뒤에 다시 게임을 할지 안할지 여부를 저장하는 변수 + again = Baseball.play(); + if(again) //계속하고자 하면 다시 continue 진행 + continue; + else //그만하고자 하면 application 종료 + break; + } } } diff --git a/src/main/java/Baseball.java b/src/main/java/Baseball.java index dcd7eea7..5ae2a961 100644 --- a/src/main/java/Baseball.java +++ b/src/main/java/Baseball.java @@ -1,17 +1,30 @@ public class Baseball { //야구 게임 전반적인 흐름을 처리 - public static void play(){ + public static boolean play(){ Util myutil = new Util(); - int answer = myutil.generateAnswer(); //숫자 3자리를 생산해냄 - int input; + Input input = new Input(); + GenerateAnswer answer = new GenerateAnswer(); + + int gameAnswer = answer.generateAnswer(); //숫자 3자리를 생산해냄 + int userInput; //사용자의 입력을 받는 변수 + + while (true) { try { - input = myutil.getInput(); //사용자의 입력값을 받음. - } catch (IllegalArgumentException e){ + userInput = input.getInput(); //사용자의 입력값을 받음. + } catch (IllegalArgumentException e){ //예외 발생시 잘못됐음을 출력하고 게임 종료 System.out.println(e.getMessage()); break; } + boolean result; //사용자가 답을 맞췄는지 여부를 담는 변수 + + result = myutil.process(userInput, gameAnswer); + if (result){ //답을 맞춘 경우에는 현재 게임 종료 + break; + } + else + continue; //그렇지 않은 경우는 답을 맞추기 위해서 다시 시도 } } } diff --git a/src/main/java/GenerateAnswer.java b/src/main/java/GenerateAnswer.java new file mode 100644 index 00000000..bb5c17e4 --- /dev/null +++ b/src/main/java/GenerateAnswer.java @@ -0,0 +1,31 @@ +import java.util.Random; + +public class GenerateAnswer { + public int generateAnswer(){ // 숫자 3자리를 만들어내는 함수 + Random random =new Random(); + int [] Answer = new int[3]; // 사용자가 맞춰야 하는 정답을 담는 int 배열 + int temp; + Answer[0]=random.nextInt(8)+1; //첫 번째 숫자 생성 + + while(true) { //두번째 숫자는 1번째 숫자와 다른 값이 오게끔 + temp = random.nextInt(8)+1; + if (Answer[0] == temp) + continue; + else + break; + } + Answer[1] = temp; + + while(true) { //세번째 숫자는 1,2번째 숫자와 다른 값이 오게끔 + temp = random.nextInt(8)+1; + if (Answer[0] == temp || Answer[1] == temp) + continue; + else + break; + } + Answer[2] = temp; + + String str = ""+Answer[0]+Answer[1]+Answer[2]; // + return Integer.parseInt(str); + } +} diff --git a/src/main/java/Input.java b/src/main/java/Input.java new file mode 100644 index 00000000..64fe0e5e --- /dev/null +++ b/src/main/java/Input.java @@ -0,0 +1,36 @@ +import java.util.Scanner; + +public class Input { + public int getInput() throws IllegalArgumentException{ //사용자의 입력을 받는 함수 + System.out.println("숫자를 입력해 주세요"); + int input; + Scanner scan = new Scanner(System.in); + + try { //사용자의 입력이 올바르지 않으면 IllegalArgumentException 던짐 + input = scan.nextInt(); + }catch(Exception e){ + throw new IllegalArgumentException("잘못된 값을 입력하였습니다"); + } + + boolean isOK = isValid(input); //사용자의 입력이 중복되지 않은 숫자들로 이루어져 있는지 판단 + if (isOK) + return input; + else + throw new IllegalArgumentException("잘못된 값을 입력하였습니다"); //그렇지 않으면 IllegalArgumentException 던지기 + } + + public boolean isValid(int input){ // 사용자의 입력이 중복되지 않은 숫자들인지 판단하는 함수 + String str = Integer.toString(input); + if(str.length() != 3) + return false; + int[] arr = new int[3]; + arr[0] =Character.getNumericValue(str.charAt(0)); + arr[1] =Character.getNumericValue(str.charAt(1)); + arr[2] =Character.getNumericValue(str.charAt(2)); + + if (arr[0] != arr[1] && arr[0] != arr[2] && arr[1] != arr[2]) //세 숫자가 모두 다른 경우는 정상 + return true; + else + return false; + } +} diff --git a/src/main/java/Util.java b/src/main/java/Util.java index 536e8075..523eeb27 100644 --- a/src/main/java/Util.java +++ b/src/main/java/Util.java @@ -2,65 +2,36 @@ import java.util.Scanner; public class Util { - public int getInput() throws IllegalArgumentException{ //사용자의 입력을 받는 함수 - System.out.println("숫자를 입력해 주세요"); - int input; - Scanner scan = new Scanner(System.in); + public boolean process(int userInput, int gameAnswer){ + int strike; //스트라이크의 갯수를 담는 변수 + int ball; //볼의 갯수를 담는 변수 - try { //사용자의 입력이 올바르지 않으면 IllegalArgumentException 던짐 - input = scan.nextInt(); - }catch(Exception e){ - throw new IllegalArgumentException("잘못된 값을 입력하였습니다"); - } - boolean isContinue = isValid(input); //사용자의 입력이 중복되지 않은 숫자들로 이루어져 있는지 판단 - if (isContinue) - return input; //올바르면 input을 넘김 - else - throw new IllegalArgumentException("잘못된 값을 입력하였습니다"); //그렇지 않으면 IllegalArgumentException 던지기 - } - - public boolean isValid(int input){ // 사용자의 입력이 중복되지 않은 숫자들인지 판단하는 함수 - String str = Integer.toString(input); - if(str.length() != 3) - return false; - int[] arr = new int[3]; - arr[0] =Character.getNumericValue(str.charAt(0)); - arr[1] =Character.getNumericValue(str.charAt(1)); - arr[2] =Character.getNumericValue(str.charAt(2)); - - if (arr[0] != arr[1] && arr[0] != arr[2] && arr[1] != arr[2]) //세 숫자가 모두 다른 경우는 정상 + strike = countStrike(userInput, gameAnswer); + if (strike ==3) return true; else return false; } - public int generateAnswer(){ // 숫자 3자리를 만들어내는 함수 - Random random =new Random(); - int [] Answer = new int[3]; // 사용자가 맞춰야 하는 정답을 담는 int 배열 - int temp; - Answer[0]=random.nextInt(8)+1; // 첫 값이 0이 올 수 없으므로 값은 이렇게 지정 - - while(true) { //두번째 값은 1번째 값과 다른 값이 오게끔 - temp = random.nextInt(9); - if (Answer[0] == temp) - continue; - else - break; - } - Answer[1] = temp; - - while(true) { //세번째 값은 1,2번째 값과 다른 값이 오게끔 - temp = random.nextInt(9); - if (Answer[0] == temp || Answer[1] == temp) - continue; - else - break; + public int countStrike(int userInput, int gameAnswer){ + int[] input = new int[3]; + input[0] = userInput/100; + input[1] = userInput/10 - input[0]*100; + input[2] = userInput%10; + + int[] answer = new int[3]; + answer[0] = userInput/100; + answer[1] = userInput/10 - answer[0]*100; + answer[2] = userInput%10; + + int cnt = 0; + for(int i = 0; i< input.length; i++){ + if(input[i]==answer[i]) + cnt++; } - Answer[2] = temp; - String str = ""+Answer[0]+Answer[1]+Answer[2]; // - return Integer.parseInt(str); + return cnt; } } From b0d9970a3e213f8ddbd32ba35a54d0fc7140bd55 Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 10:53:17 +0900 Subject: [PATCH 06/16] =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=ED=81=AC=EC=9D=98=20=EA=B0=AF=EC=88=98=EB=A5=BC=20=ED=8C=90?= =?UTF-8?q?=EB=8B=A8=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++-- src/main/java/Baseball.java | 5 +++-- src/main/java/Util.java | 32 +++++++++++++------------------- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 47d20d19..0174b40b 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ - 사용자가 맞출 3자리 숫자를 생성하는 기능 - 사용자의 입력값이 중복되지 않은 값인지 판단하는 기능. - 사용자의 잘못된 입력값에 대해 IllegalArgumentException을 처리하는 기능 -- 사용자의 입력값이 답을 맞췄는지 확인하는 기능 -- 사용자의 입력값과 답 간에 비교하여 결과를 판단하는 기능 +- 볼의 갯수를 판단하는 기능 +- 스트라이크의 갯수를 판단하는 기능 +- 사용자의 입력값이 답을 맞췄는지 확인하는 기능 - 사용자가 답을 맞춘 후에 계속해서 겜을 다시할지 겜을 종료할지 선택을 받고 처리하는 기능 diff --git a/src/main/java/Baseball.java b/src/main/java/Baseball.java index 5ae2a961..aceb7364 100644 --- a/src/main/java/Baseball.java +++ b/src/main/java/Baseball.java @@ -23,8 +23,9 @@ public static boolean play(){ if (result){ //답을 맞춘 경우에는 현재 게임 종료 break; } - else - continue; //그렇지 않은 경우는 답을 맞추기 위해서 다시 시도 + else { + continue; + }//그렇지 않은 경우는 답을 맞추기 위해서 다시 시도 } } } diff --git a/src/main/java/Util.java b/src/main/java/Util.java index 523eeb27..c4aeb899 100644 --- a/src/main/java/Util.java +++ b/src/main/java/Util.java @@ -1,30 +1,24 @@ import java.util.Random; import java.util.Scanner; -public class Util { +public class Util { // public boolean process(int userInput, int gameAnswer){ - int strike; //스트라이크의 갯수를 담는 변수 - int ball; //볼의 갯수를 담는 변수 - - - strike = countStrike(userInput, gameAnswer); - if (strike ==3) - return true; - else - return false; - } - - public int countStrike(int userInput, int gameAnswer){ - int[] input = new int[3]; + int[] input = new int[3]; //볼과 스트라이크 계산을 위해 userInput을 크기가 3인 배열에 대입. input[0] = userInput/100; - input[1] = userInput/10 - input[0]*100; + input[1] = userInput/10 - input[0]*10; input[2] = userInput%10; - int[] answer = new int[3]; - answer[0] = userInput/100; - answer[1] = userInput/10 - answer[0]*100; - answer[2] = userInput%10; + int[] answer = new int[3]; //볼과 스트라이크 계산을 위해 gameAnswer을 크기가 3인 배열에 대입. + answer[0] = gameAnswer/100; + answer[1] = gameAnswer/10 - gameAnswer*10; + answer[2] = gameAnswer%10; + + int strike; //스트라이크의 갯수를 담는 변수 + + strike = countStrike(input, answer); + } + public int countStrike(int[] input, int[] answer){ //strike의 갯수를 구하는 함수 int cnt = 0; for(int i = 0; i< input.length; i++){ if(input[i]==answer[i]) From 3cb622c5f75a84f8c19bdd5c47d5122688937279 Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 10:56:50 +0900 Subject: [PATCH 07/16] =?UTF-8?q?=EB=B3=BC=EC=9D=98=20=EA=B0=AF=EC=88=98?= =?UTF-8?q?=EB=A5=BC=20=ED=8C=90=EB=8B=A8=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Util.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/Util.java b/src/main/java/Util.java index c4aeb899..e601f3a2 100644 --- a/src/main/java/Util.java +++ b/src/main/java/Util.java @@ -14,8 +14,11 @@ public boolean process(int userInput, int gameAnswer){ answer[2] = gameAnswer%10; int strike; //스트라이크의 갯수를 담는 변수 + int ball; //볼의 갯수를 담는 변수 strike = countStrike(input, answer); + ball = countBall(input,answer); + ball = ball - strike; // 볼의 갯수는 앞에서 구한 볼의 갯수에서strike를 빼줘야 함. } public int countStrike(int[] input, int[] answer){ //strike의 갯수를 구하는 함수 @@ -28,4 +31,12 @@ public int countStrike(int[] input, int[] answer){ //strike의 갯수를 구하 return cnt; } + public int countBall(int[] input, int[] answer){ //ball의 갯수를 구하는 함수 + int cnt = 0; + for(int i = 0; i< input.length; i++){ + if(input[i]==answer[0] || input[i] == answer[1] || input[i] == answer[2]) + cnt++; + } + return cnt; + } } From 52b4bfb0c460ff6e1c8808b292dfe981b933a71b Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 11:01:52 +0900 Subject: [PATCH 08/16] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EC=9D=98=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EA=B0=92=EC=9D=B4=20=EB=8B=B5=EC=9D=84=20?= =?UTF-8?q?=EB=A7=9E=EC=B7=84=EB=8A=94=EC=A7=80=20=ED=99=95=EC=9D=B8?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Util.java | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/main/java/Util.java b/src/main/java/Util.java index e601f3a2..35d0c58f 100644 --- a/src/main/java/Util.java +++ b/src/main/java/Util.java @@ -2,23 +2,47 @@ import java.util.Scanner; public class Util { // - public boolean process(int userInput, int gameAnswer){ + public boolean process(int userInput, int gameAnswer) { int[] input = new int[3]; //볼과 스트라이크 계산을 위해 userInput을 크기가 3인 배열에 대입. - input[0] = userInput/100; - input[1] = userInput/10 - input[0]*10; - input[2] = userInput%10; + input[0] = userInput / 100; + input[1] = userInput / 10 - input[0] * 10; + input[2] = userInput % 10; int[] answer = new int[3]; //볼과 스트라이크 계산을 위해 gameAnswer을 크기가 3인 배열에 대입. - answer[0] = gameAnswer/100; - answer[1] = gameAnswer/10 - gameAnswer*10; - answer[2] = gameAnswer%10; + answer[0] = gameAnswer / 100; + answer[1] = gameAnswer / 10 - gameAnswer * 10; + answer[2] = gameAnswer % 10; int strike; //스트라이크의 갯수를 담는 변수 int ball; //볼의 갯수를 담는 변수 strike = countStrike(input, answer); - ball = countBall(input,answer); + ball = countBall(input, answer); ball = ball - strike; // 볼의 갯수는 앞에서 구한 볼의 갯수에서strike를 빼줘야 함. + if (strike + ball == 0) { //볼과 스트라이크의 갯수가0인 경우에는 낫싱 + System.out.println("낫싱"); + return false; + } else { + switch (ball) { + case 0: + break; + default: //볼이 있는 경우 볼 출력 + System.out.print(ball + "볼"); + break; + + } + switch (strike) { + case 0: + return false; + case 1: + case 2: + System.out.println(strike + "스트라이크"); + return false; + default: + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + return true; + } + } } public int countStrike(int[] input, int[] answer){ //strike의 갯수를 구하는 함수 From 8fc5e49d12e3d80504d45b5ca9071437bba48ea3 Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 11:17:18 +0900 Subject: [PATCH 09/16] =?UTF-8?q?=EB=8B=B5=EC=9D=84=20=EB=A7=9E=EC=B6=98?= =?UTF-8?q?=20=ED=9B=84=20=EA=B2=8C=EC=9E=84=EC=9D=84=20=EB=8D=94=20?= =?UTF-8?q?=ED=95=A0=EC=A7=80=20=EC=B2=98=EB=A6=AC=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Baseball.java | 5 +++++ src/main/java/GameAgain.java | 15 +++++++++++++++ src/main/java/Util.java | 7 +++++-- 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 src/main/java/GameAgain.java diff --git a/src/main/java/Baseball.java b/src/main/java/Baseball.java index aceb7364..f4274714 100644 --- a/src/main/java/Baseball.java +++ b/src/main/java/Baseball.java @@ -27,5 +27,10 @@ public static boolean play(){ continue; }//그렇지 않은 경우는 답을 맞추기 위해서 다시 시도 } + //답을 맞추고 게임이 종료된 시점 + GameAgain game = new GameAgain(); + boolean again = game.gameAgain(); + + return again; } } diff --git a/src/main/java/GameAgain.java b/src/main/java/GameAgain.java new file mode 100644 index 00000000..d79f4096 --- /dev/null +++ b/src/main/java/GameAgain.java @@ -0,0 +1,15 @@ +import java.util.Scanner; + +public class GameAgain { //게임을 또 할지 여쭤보고 그 결과를 알려주는 함수 + public boolean gameAgain(){ + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + int input; + Scanner scan = new Scanner(System.in); + input = scan.nextInt(); + + if(input == 1) + return true; + else + return false; + } +} diff --git a/src/main/java/Util.java b/src/main/java/Util.java index 35d0c58f..b7e60bdb 100644 --- a/src/main/java/Util.java +++ b/src/main/java/Util.java @@ -10,7 +10,7 @@ public boolean process(int userInput, int gameAnswer) { int[] answer = new int[3]; //볼과 스트라이크 계산을 위해 gameAnswer을 크기가 3인 배열에 대입. answer[0] = gameAnswer / 100; - answer[1] = gameAnswer / 10 - gameAnswer * 10; + answer[1] = gameAnswer / 10 - answer[0] * 10; answer[2] = gameAnswer % 10; int strike; //스트라이크의 갯수를 담는 변수 @@ -19,6 +19,7 @@ public boolean process(int userInput, int gameAnswer) { strike = countStrike(input, answer); ball = countBall(input, answer); ball = ball - strike; // 볼의 갯수는 앞에서 구한 볼의 갯수에서strike를 빼줘야 함. + if (strike + ball == 0) { //볼과 스트라이크의 갯수가0인 경우에는 낫싱 System.out.println("낫싱"); return false; @@ -27,12 +28,13 @@ public boolean process(int userInput, int gameAnswer) { case 0: break; default: //볼이 있는 경우 볼 출력 - System.out.print(ball + "볼"); + System.out.print(ball + "볼 "); break; } switch (strike) { case 0: + System.out.println(); return false; case 1: case 2: @@ -47,6 +49,7 @@ public boolean process(int userInput, int gameAnswer) { public int countStrike(int[] input, int[] answer){ //strike의 갯수를 구하는 함수 int cnt = 0; + for(int i = 0; i< input.length; i++){ if(input[i]==answer[i]) cnt++; From 0809a7bf3de07525c1efe8b9c9caf25e6f1b2171 Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 11:34:01 +0900 Subject: [PATCH 10/16] =?UTF-8?q?=EB=8B=B5=EC=9D=84=EB=A7=9E=EC=B6=98=20?= =?UTF-8?q?=ED=9B=84=20=EA=B2=8C=EC=9E=84=EC=9D=84=20=EB=8D=94=20=ED=95=A0?= =?UTF-8?q?=EC=A7=80=20=EC=B2=98=EB=A6=AC=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Baseball.java | 14 +++++++++++--- src/main/java/GameAgain.java | 23 ++++++++++++++++------- src/main/java/Util.java | 6 +++--- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/main/java/Baseball.java b/src/main/java/Baseball.java index f4274714..a6fec893 100644 --- a/src/main/java/Baseball.java +++ b/src/main/java/Baseball.java @@ -6,15 +6,15 @@ public static boolean play(){ GenerateAnswer answer = new GenerateAnswer(); int gameAnswer = answer.generateAnswer(); //숫자 3자리를 생산해냄 + System.out.println(gameAnswer); int userInput; //사용자의 입력을 받는 변수 - while (true) { try { userInput = input.getInput(); //사용자의 입력값을 받음. } catch (IllegalArgumentException e){ //예외 발생시 잘못됐음을 출력하고 게임 종료 System.out.println(e.getMessage()); - break; + return false; } boolean result; //사용자가 답을 맞췄는지 여부를 담는 변수 @@ -27,9 +27,17 @@ public static boolean play(){ continue; }//그렇지 않은 경우는 답을 맞추기 위해서 다시 시도 } + //답을 맞추고 게임이 종료된 시점 GameAgain game = new GameAgain(); - boolean again = game.gameAgain(); + boolean again; //게임을 더 진행할지 여부를 담는 변수 + + try { + again = game.gameAgain(); //게임을 추가적으로 진행할지 여부를 받음. + } catch (IllegalArgumentException e){ //예외 발생시 잘못됐음을 출력하고 false를 던져 게임 종료 + System.out.println(e.getMessage()); + return false; + } return again; } diff --git a/src/main/java/GameAgain.java b/src/main/java/GameAgain.java index d79f4096..86f762d3 100644 --- a/src/main/java/GameAgain.java +++ b/src/main/java/GameAgain.java @@ -1,15 +1,24 @@ import java.util.Scanner; -public class GameAgain { //게임을 또 할지 여쭤보고 그 결과를 알려주는 함수 - public boolean gameAgain(){ +public class GameAgain { + public boolean gameAgain() throws IllegalArgumentException{ //게임을 또 할지 여쭤보고 그 결과를 알려주는 함수 System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); int input; Scanner scan = new Scanner(System.in); - input = scan.nextInt(); - if(input == 1) - return true; - else - return false; + try { //사용자의 입력이 올바르지 않으면 IllegalArgumentException 던짐 + input = scan.nextInt(); + }catch(Exception e){ + throw new IllegalArgumentException("잘못된 값을 입력하였습니다"); + } + + switch (input){ + case 1 : + return true; + case 2: + return false; + default: //1과 2이외의 값이 입력되는 경우 예외 던짐 + throw new IllegalArgumentException("잘못된 값을 입력하였습니다"); + } } } diff --git a/src/main/java/Util.java b/src/main/java/Util.java index b7e60bdb..479f5988 100644 --- a/src/main/java/Util.java +++ b/src/main/java/Util.java @@ -1,8 +1,8 @@ import java.util.Random; import java.util.Scanner; -public class Util { // - public boolean process(int userInput, int gameAnswer) { +public class Util { + public boolean process(int userInput, int gameAnswer) { //입력값과 답을 비교하여 결과를 출력하는 함수 int[] input = new int[3]; //볼과 스트라이크 계산을 위해 userInput을 크기가 3인 배열에 대입. input[0] = userInput / 100; input[1] = userInput / 10 - input[0] * 10; @@ -18,7 +18,7 @@ public boolean process(int userInput, int gameAnswer) { strike = countStrike(input, answer); ball = countBall(input, answer); - ball = ball - strike; // 볼의 갯수는 앞에서 구한 볼의 갯수에서strike를 빼줘야 함. + ball = ball - strike; // 볼의 갯수는 앞에서 구한 볼의 갯수에서 strike를 빼줘야 함. if (strike + ball == 0) { //볼과 스트라이크의 갯수가0인 경우에는 낫싱 System.out.println("낫싱"); From ac0d4aeb912b267bcf6e4ddd22268fd6eaae812c Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 12:01:06 +0900 Subject: [PATCH 11/16] =?UTF-8?q?fix=20:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=9D=98=20=EC=9E=85=EB=A0=A5=EA=B0=92=20=EC=A4=91=EC=97=90=20?= =?UTF-8?q?0=EC=9D=B4=20=EB=93=A4=EC=96=B4=EC=9E=88=EB=8A=94=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=EC=9E=98=EB=AA=BB=EB=90=9C=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EA=B0=92=EC=9C=BC=EB=A1=9C=20=ED=8C=90=EB=8B=A8=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=A1=9C=EC=A7=81=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/Input.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/Input.java b/src/main/java/Input.java index 64fe0e5e..d6ba65b1 100644 --- a/src/main/java/Input.java +++ b/src/main/java/Input.java @@ -28,6 +28,9 @@ public boolean isValid(int input){ // 사용자의 입력이 중복되지 않은 arr[1] =Character.getNumericValue(str.charAt(1)); arr[2] =Character.getNumericValue(str.charAt(2)); + if (arr[0]== 0 || arr[1] == 0 || arr[2] ==0) //입력값중에 0이 있는 경우는 비정상 + return false; + if (arr[0] != arr[1] && arr[0] != arr[2] && arr[1] != arr[2]) //세 숫자가 모두 다른 경우는 정상 return true; else From 999165562b49d331f40474de312aa3b2a05d40ff Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 12:02:30 +0900 Subject: [PATCH 12/16] =?UTF-8?q?fix=20:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=9D=98=20=EC=9E=85=EB=A0=A5=EA=B0=92=20=EC=A4=91=EC=97=90=20?= =?UTF-8?q?0=EC=9D=B4=20=EB=93=A4=EC=96=B4=EC=9E=88=EB=8A=94=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=EC=9E=98=EB=AA=BB=EB=90=9C=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EA=B0=92=EC=9C=BC=EB=A1=9C=20=ED=8C=90=EB=8B=A8=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=A1=9C=EC=A7=81=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/Input.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/Input.java b/src/main/java/Input.java index d6ba65b1..746ca37d 100644 --- a/src/main/java/Input.java +++ b/src/main/java/Input.java @@ -28,7 +28,7 @@ public boolean isValid(int input){ // 사용자의 입력이 중복되지 않은 arr[1] =Character.getNumericValue(str.charAt(1)); arr[2] =Character.getNumericValue(str.charAt(2)); - if (arr[0]== 0 || arr[1] == 0 || arr[2] ==0) //입력값중에 0이 있는 경우는 비정상 + if (arr[0]== 0 || arr[1] == 0 || arr[2] ==0) //입력값중에 0이 있는 경우는 정상이 아님. return false; if (arr[0] != arr[1] && arr[0] != arr[2] && arr[1] != arr[2]) //세 숫자가 모두 다른 경우는 정상 From 11c3c75f961e0ff3967e43d811646a4d777d8642 Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 12:19:04 +0900 Subject: [PATCH 13/16] Test : GenerateAnswer --- src/test/java/GenerateAnswerTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/test/java/GenerateAnswerTest.java diff --git a/src/test/java/GenerateAnswerTest.java b/src/test/java/GenerateAnswerTest.java new file mode 100644 index 00000000..5552b40e --- /dev/null +++ b/src/test/java/GenerateAnswerTest.java @@ -0,0 +1,18 @@ +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +class GenerateAnswerTest { + + @Test + void generateAnswer() { + Input userInput = new Input(); + GenerateAnswer generateAnswer = new GenerateAnswer(); + + for(int i = 0; i < 5000 ; i++){ + assertThat(userInput.isValid(generateAnswer.generateAnswer())).isTrue(); + } + + } +} \ No newline at end of file From 72edb9e768cacca52e60c98213ef803a27e74290 Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 12:39:23 +0900 Subject: [PATCH 14/16] Test : Input --- src/test/java/InputTest.java | 59 ++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/test/java/InputTest.java diff --git a/src/test/java/InputTest.java b/src/test/java/InputTest.java new file mode 100644 index 00000000..07d40522 --- /dev/null +++ b/src/test/java/InputTest.java @@ -0,0 +1,59 @@ +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +class InputTest { + + InputStream sysInBackup; + @BeforeEach + void setUp() { + sysInBackup = System.in; + } + + @AfterEach + void tearDown() { + System.setIn(sysInBackup); + } + + void sysIn(String input) { + System.setIn(new ByteArrayInputStream(input.getBytes())); + } + + + @Test + void getInput() { + String[] success = {"123", "451", "874"}; + String[] fails = {"ㄱㄴㄷ", "42", "119", "001", "1111"}; + Input input = new Input(); + for(int i = 0; i < success.length; i++){ + sysIn(success[i]); + assertThat(input.isValid(input.getInput())).isTrue(); + } + + for(int i = 0; i < fails.length; i++){ + sysIn(fails[i]); + assertThrows(IllegalArgumentException.class, ()->{input.getInput();}); + } + + } + + @Test + void isValid() { + int[] success ={123, 124, 125}; + int[] fails ={111, 102, 022}; + Input input = new Input(); + for(int i = 0; i < success.length;i++){ + assertThat(input.isValid(success[i])).isTrue(); + } + + for(int i = 0; i < fails.length;i++){ + assertThat(input.isValid(fails[i])).isFalse(); + } + } +} \ No newline at end of file From 6c46cc7a19592524c2679d8eb8734dcb66fc94d7 Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 12:46:38 +0900 Subject: [PATCH 15/16] Test : GameAgain --- src/test/java/GameAgainTest.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/test/java/GameAgainTest.java diff --git a/src/test/java/GameAgainTest.java b/src/test/java/GameAgainTest.java new file mode 100644 index 00000000..63edd716 --- /dev/null +++ b/src/test/java/GameAgainTest.java @@ -0,0 +1,4 @@ +import static org.junit.jupiter.api.Assertions.*; +class GameAgainTest { + +} \ No newline at end of file From 03c7977142177d2f24c854471ac4e924d3432f44 Mon Sep 17 00:00:00 2001 From: Woojae Jeong Date: Mon, 6 May 2024 12:53:19 +0900 Subject: [PATCH 16/16] Test : GameAgain --- src/test/java/GameAgainTest.java | 41 +++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/test/java/GameAgainTest.java b/src/test/java/GameAgainTest.java index 63edd716..c90c5dda 100644 --- a/src/test/java/GameAgainTest.java +++ b/src/test/java/GameAgainTest.java @@ -1,4 +1,43 @@ +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; + +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; +// class GameAgainTest { - + InputStream sysInBackup; + @BeforeEach + void setUp() { + sysInBackup = System.in; + } + + @AfterEach + void tearDown() { + System.setIn(sysInBackup); + } + + void sysIn(String input) { + System.setIn(new ByteArrayInputStream(input.getBytes())); + } + @Test + void gameAgain() { + String [] success = {"1","2"}; + String[] fails = {"3","4", "ㄱㄴㄷ"}; + GameAgain gameAgain = new GameAgain(); + + sysIn(success[0]); + assertThat(gameAgain.gameAgain()).isTrue(); + + sysIn(success[1]); + assertThat(gameAgain.gameAgain()).isFalse(); + + for(int i = 0; i < fails.length; i++){ + sysIn(fails[i]); + assertThrows(IllegalArgumentException.class, ()->{gameAgain.gameAgain();}); + } + } } \ No newline at end of file