From 320a0401a4ff1df22029ece8ca00a7d5c13f21f8 Mon Sep 17 00:00:00 2001 From: qotjsry Date: Fri, 21 Jul 2023 23:01:23 +0900 Subject: [PATCH 1/3] =?UTF-8?q?Feat:=20=EB=B2=A0=EC=9D=B4=EC=8A=A4?= =?UTF-8?q?=EB=B3=BC=20=EA=B2=8C=EC=9E=84=20=EC=88=AB=EC=9E=90=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EA=B0=9C=EB=B0=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=86=8C=EC=8A=A4=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/Calculator.java | 60 ++++++++++++++++++++ src/main/java/Main.java | 6 ++ src/main/java/baseball/CreateNumber.java | 24 ++++++++ src/test/java/baseball/CreateNumberTest.java | 19 +++++++ src/test/java/study/SetTest.java | 39 +++++++++++++ src/test/java/study/StringTest.java | 34 +++++++++++ 6 files changed, 182 insertions(+) create mode 100644 src/main/java/Calculator.java create mode 100644 src/main/java/Main.java create mode 100644 src/main/java/baseball/CreateNumber.java create mode 100644 src/test/java/baseball/CreateNumberTest.java create mode 100644 src/test/java/study/SetTest.java diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java new file mode 100644 index 000000000..a7af39b03 --- /dev/null +++ b/src/main/java/Calculator.java @@ -0,0 +1,60 @@ +import java.util.Scanner; + +public class Calculator { + public int calculator(String value) { + String[] values = isBlank(value); + int result = stringToInt(values[0]); + for (int i = 1; i < values.length; i += 2) { + result = calc(values[i],result,stringToInt(values[i+1])); + } + return result; + } + public int calc(String value, int result, int nextNumber) { + switch(value){ + case "+" : + return sum(result, nextNumber); + case "-" : + return sub(result, nextNumber); + case "/" : + return divide(result, nextNumber); + case "*" : + return multiply(result, nextNumber); + default: + return -1; + } + + + } + + public String[] isBlank(String value) { + if (value == null || value.isEmpty()) { + throw new IllegalArgumentException("입력값을 확인해 주세요"); + } + return value.split(" "); + } + + public int stringToInt(String value) { + return Integer.parseInt(value); + } + + public int sum(int a, int b) { + return a + b; + } + + public int sub(int a, int b) { + return a - b; + } + + public int divide(int a, int b) { + try { + return a / b; + } catch (Exception e) { + System.out.println("0으로 나눌 수 없습니다."); + return 0; + } + } + + public int multiply(int a, int b) { + return a * b; + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 000000000..aa4b328d6 --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,6 @@ +public class Main { + public static void main(String[] args) { + Calculator calculator = new Calculator(); + int result = calculator.calculator("2 + 3 * 4 / 2"); + } +} diff --git a/src/main/java/baseball/CreateNumber.java b/src/main/java/baseball/CreateNumber.java new file mode 100644 index 000000000..9b9d31632 --- /dev/null +++ b/src/main/java/baseball/CreateNumber.java @@ -0,0 +1,24 @@ +package baseball; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class CreateNumber { + + public int makeRandomNumber(List numberList) { + Random random = new Random(); + if(numberList.contains((random.nextInt(9)+1))){ + return makeRandomNumber(numberList); + } + return random.nextInt(9)+1; + } + + public List makeRandomNumbers() { + List numberList = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + numberList.add(makeRandomNumber(numberList)); + } + return numberList; + } +} diff --git a/src/test/java/baseball/CreateNumberTest.java b/src/test/java/baseball/CreateNumberTest.java new file mode 100644 index 000000000..9aaafbf8f --- /dev/null +++ b/src/test/java/baseball/CreateNumberTest.java @@ -0,0 +1,19 @@ +package baseball; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class CreateNumberTest { + + @Test + void createNumber() { + CreateNumber createNumber = new CreateNumber(); + List numberList = createNumber.makeRandomNumbers(); + System.out.println(numberList); + assertEquals(3, numberList.size()); + } + +} \ No newline at end of file diff --git a/src/test/java/study/SetTest.java b/src/test/java/study/SetTest.java new file mode 100644 index 000000000..5b8d9305b --- /dev/null +++ b/src/test/java/study/SetTest.java @@ -0,0 +1,39 @@ +package study; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.HashSet; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class SetTest { + private Set numbers; + + @BeforeEach + void setUp() { + numbers = new HashSet<>(); + numbers.add(1); + numbers.add(1); + numbers.add(2); + numbers.add(3); + } + + @Test + void checkSize() { + assertThat(numbers.size()).isEqualTo(3); + } + + @Test + void contain() { + assertThat(numbers.contains(1)).isTrue(); + assertThat(numbers.contains(2)).isTrue(); + assertThat(numbers.contains(3)).isTrue(); + } + + +} diff --git a/src/test/java/study/StringTest.java b/src/test/java/study/StringTest.java index 43e47d90b..462020b0a 100644 --- a/src/test/java/study/StringTest.java +++ b/src/test/java/study/StringTest.java @@ -1,8 +1,10 @@ package study; +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.assertThatExceptionOfType; public class StringTest { @Test @@ -10,4 +12,36 @@ void replace() { String actual = "abc".replace("b", "d"); assertThat(actual).isEqualTo("adc"); } + @Test + void first() { + String[] firstTest = "1".split(","); + assertThat(firstTest).contains("1"); + String[] secondTest = "1,2".split(","); + assertThat(secondTest).containsExactly("1","2"); + } + @Test + void second() { + String firstTest = "(1,2)".replace("(","").replace(")",""); + assertThat(firstTest).isEqualTo("1,2"); + } + @Test + @DisplayName("String 에서 charAt을 이용하여 특정 위치의 문자열을 가져오고 예외처리를 한다.") + void third(){ + String str = "abc"; + str.charAt(0); + str.charAt(1); + str.charAt(2); + + assertThatExceptionOfType(IndexOutOfBoundsException.class).isThrownBy(() -> { + str.charAt(3); + }).withMessageMatching("Index : \\d+, Size : \\d+"); + assertThat(str.charAt(0)).isEqualTo('a'); + assertThat(str.charAt(1)).isEqualTo('b'); + assertThat(str.charAt(2)).isEqualTo('c'); + + } + + + + } From be930497ae491d4228b656417dbc154b1f74c6a3 Mon Sep 17 00:00:00 2001 From: qotjsry Date: Sat, 22 Jul 2023 23:35:55 +0900 Subject: [PATCH 2/3] =?UTF-8?q?Feat:=20=EB=B2=A0=EC=9D=B4=EC=8A=A4?= =?UTF-8?q?=EB=B3=BC=20=EA=B2=8C=EC=9E=84=20=EA=B5=AC=ED=98=84=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 3 +- src/main/java/baseball/BaseballGame.java | 52 ++++++++++++++++++++ src/main/java/baseball/BaseballMain.java | 9 ++++ src/main/java/baseball/CheckNumber.java | 26 ++++++++++ src/main/java/baseball/CreateNumber.java | 7 +-- src/test/java/baseball/CheckNumberTest.java | 49 ++++++++++++++++++ src/test/java/baseball/CreateNumberTest.java | 1 - 7 files changed, 142 insertions(+), 5 deletions(-) create mode 100644 src/main/java/baseball/BaseballGame.java create mode 100644 src/main/java/baseball/BaseballMain.java create mode 100644 src/main/java/baseball/CheckNumber.java create mode 100644 src/test/java/baseball/CheckNumberTest.java diff --git a/build.gradle b/build.gradle index 8172fb73f..237ba4eb1 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'eclipse' group = 'camp.nextstep' version = '1.0.0' -sourceCompatibility = '1.8' +sourceCompatibility = "1.9" repositories { mavenCentral() @@ -17,3 +17,4 @@ dependencies { test { useJUnitPlatform() } +targetCompatibility = JavaVersion.VERSION_1_9 diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java new file mode 100644 index 000000000..8f79f13c8 --- /dev/null +++ b/src/main/java/baseball/BaseballGame.java @@ -0,0 +1,52 @@ +package baseball; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class BaseballGame { + + public void startGame() { + System.out.println("게임을 시작합니다."); + CreateNumber createNumber = new CreateNumber(); + CheckNumber checkNumber = new CheckNumber(); + List computerNumberList; + int result = 0; + computerNumberList = createNumber.makeRandomNumbers(); + while(result != 30){ + String inputNumber = inputNumber(); + int[] userNumberArray = splitNumber(inputNumber); + result = checkNumber.checkNumber(computerNumberList,userNumberArray); + System.out.println(result%10 + "볼" + result/10 + "스트라이크"); + } + } + + public void endGame(){ + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + } + + public String inputNumber(){ + System.out.println("세자리 숫자를 입력해주세요 : "); + Scanner scanner = new Scanner(System.in); + int input = 0; + try { + input = scanner.nextInt(); + }catch (Exception e){ + System.out.println("문자열 말고 숫자만 입력 가능합니다."); + } + if(input < 100 || input > 999){ + System.out.println("3자리 숫자만 입력 가능합니다. "); + } + return String.valueOf(input); + } + + public int[] splitNumber(String userNumber){ + int[] numberArray = new int[3]; + for(int i=0;i<3;i++){ + numberArray[i] = Integer.parseInt(String.valueOf(userNumber.charAt(i))); + } + return numberArray; + } + + +} diff --git a/src/main/java/baseball/BaseballMain.java b/src/main/java/baseball/BaseballMain.java new file mode 100644 index 000000000..11d3e80dc --- /dev/null +++ b/src/main/java/baseball/BaseballMain.java @@ -0,0 +1,9 @@ +package baseball; + +public class BaseballMain { + public static void main(String[] args) { + BaseballGame baseballGame = new BaseballGame(); + baseballGame.startGame(); + baseballGame.endGame(); + } +} diff --git a/src/main/java/baseball/CheckNumber.java b/src/main/java/baseball/CheckNumber.java new file mode 100644 index 000000000..ff174858a --- /dev/null +++ b/src/main/java/baseball/CheckNumber.java @@ -0,0 +1,26 @@ +package baseball; + +import java.util.List; + +public class CheckNumber { + public int checkNumber(List computerNumberList, int[] userNumber) { + int result = 0; + for(int i=0;i computerNumberList,int userNumber,int index) { + if(!computerNumberList.contains(userNumber)){ + return 0; + } + if(computerNumberList.indexOf(userNumber) == index) { + return 10; + } + if(computerNumberList.indexOf(userNumber) != index) { + return 1; + } + return 0; + } + +} diff --git a/src/main/java/baseball/CreateNumber.java b/src/main/java/baseball/CreateNumber.java index 9b9d31632..86bf023fb 100644 --- a/src/main/java/baseball/CreateNumber.java +++ b/src/main/java/baseball/CreateNumber.java @@ -6,10 +6,10 @@ public class CreateNumber { - public int makeRandomNumber(List numberList) { + public int createRandomNumber(List numberList) { Random random = new Random(); if(numberList.contains((random.nextInt(9)+1))){ - return makeRandomNumber(numberList); + createRandomNumber(numberList); } return random.nextInt(9)+1; } @@ -17,8 +17,9 @@ public int makeRandomNumber(List numberList) { public List makeRandomNumbers() { List numberList = new ArrayList<>(); for (int i = 0; i < 3; i++) { - numberList.add(makeRandomNumber(numberList)); + numberList.add(createRandomNumber(numberList)); } + System.out.println(numberList); return numberList; } } diff --git a/src/test/java/baseball/CheckNumberTest.java b/src/test/java/baseball/CheckNumberTest.java new file mode 100644 index 000000000..721ca9d8e --- /dev/null +++ b/src/test/java/baseball/CheckNumberTest.java @@ -0,0 +1,49 @@ +package baseball; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class CheckNumberTest { + CheckNumber checkNumber = new CheckNumber(); + @Test + void checkAllStrike() { + List computerNumberList = List.of(1,2,3); + int[] userNumber = {1,2,3}; + int result = checkNumber.checkNumber(computerNumberList,userNumber); + assertThat(result).isEqualTo(30); + } + @Test + void checkAllNothing(){ + List computerNumberList = List.of(1,2,3); + int[] userNumber = {4,5,6}; + int result = checkNumber.checkNumber(computerNumberList,userNumber); + assertThat(result).isEqualTo(0); + } + @Test + void checkAllBall(){ + List computerNumberList = List.of(1,2,3); + int[] userNumber = {2,3,1}; + int result = checkNumber.checkNumber(computerNumberList,userNumber); + assertThat(result).isEqualTo(3); + } + + @Test + void isCorrect() { + List computerNumberList = List.of(1,2,3); + int result = checkNumber.isCorrect(computerNumberList,1,0); + assertThat(result).isEqualTo(10); + } + + @Test + void isNotCorrect() { + List computerNumberList = List.of(1,2,3); + int result = checkNumber.isCorrect(computerNumberList,4,0); + assertThat(result).isEqualTo(0); + } + + + +} \ No newline at end of file diff --git a/src/test/java/baseball/CreateNumberTest.java b/src/test/java/baseball/CreateNumberTest.java index 9aaafbf8f..7a1e6e3fa 100644 --- a/src/test/java/baseball/CreateNumberTest.java +++ b/src/test/java/baseball/CreateNumberTest.java @@ -12,7 +12,6 @@ class CreateNumberTest { void createNumber() { CreateNumber createNumber = new CreateNumber(); List numberList = createNumber.makeRandomNumbers(); - System.out.println(numberList); assertEquals(3, numberList.size()); } From 71f25d315c63692b66dd58bfd6b101508a88b072 Mon Sep 17 00:00:00 2001 From: qotjsry Date: Sun, 23 Jul 2023 10:14:56 +0900 Subject: [PATCH 3/3] =?UTF-8?q?Fix:=20=EB=B2=A0=EC=9D=B4=EC=8A=A4=EB=B3=BC?= =?UTF-8?q?=20=EA=B2=8C=EC=9E=84=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/BaseballGame.java | 29 ++++++++---------------- src/main/java/baseball/BaseballMain.java | 2 +- src/main/java/baseball/CheckNumber.java | 26 +++++++++++++++++++++ src/main/java/baseball/CreateNumber.java | 11 +++++---- 4 files changed, 43 insertions(+), 25 deletions(-) diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java index 8f79f13c8..27d0f300e 100644 --- a/src/main/java/baseball/BaseballGame.java +++ b/src/main/java/baseball/BaseballGame.java @@ -14,8 +14,8 @@ public void startGame() { int result = 0; computerNumberList = createNumber.makeRandomNumbers(); while(result != 30){ - String inputNumber = inputNumber(); - int[] userNumberArray = splitNumber(inputNumber); + String inputNumber = checkNumber.inputNumber(); + int[] userNumberArray = checkNumber.splitNumber(inputNumber); result = checkNumber.checkNumber(computerNumberList,userNumberArray); System.out.println(result%10 + "볼" + result/10 + "스트라이크"); } @@ -25,28 +25,19 @@ public void endGame(){ System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); } - public String inputNumber(){ - System.out.println("세자리 숫자를 입력해주세요 : "); + public void reGame(){ + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); Scanner scanner = new Scanner(System.in); - int input = 0; - try { - input = scanner.nextInt(); - }catch (Exception e){ - System.out.println("문자열 말고 숫자만 입력 가능합니다."); + int input = scanner.nextInt(); + if(input == 1){ + startGame(); } - if(input < 100 || input > 999){ - System.out.println("3자리 숫자만 입력 가능합니다. "); + if(input == 2){ + endGame(); } - return String.valueOf(input); } - public int[] splitNumber(String userNumber){ - int[] numberArray = new int[3]; - for(int i=0;i<3;i++){ - numberArray[i] = Integer.parseInt(String.valueOf(userNumber.charAt(i))); - } - return numberArray; - } + } diff --git a/src/main/java/baseball/BaseballMain.java b/src/main/java/baseball/BaseballMain.java index 11d3e80dc..e5b2f753a 100644 --- a/src/main/java/baseball/BaseballMain.java +++ b/src/main/java/baseball/BaseballMain.java @@ -4,6 +4,6 @@ public class BaseballMain { public static void main(String[] args) { BaseballGame baseballGame = new BaseballGame(); baseballGame.startGame(); - baseballGame.endGame(); + baseballGame.reGame(); } } diff --git a/src/main/java/baseball/CheckNumber.java b/src/main/java/baseball/CheckNumber.java index ff174858a..68ac12d61 100644 --- a/src/main/java/baseball/CheckNumber.java +++ b/src/main/java/baseball/CheckNumber.java @@ -1,6 +1,7 @@ package baseball; import java.util.List; +import java.util.Scanner; public class CheckNumber { public int checkNumber(List computerNumberList, int[] userNumber) { @@ -23,4 +24,29 @@ public int isCorrect(List computerNumberList,int userNumber,int index) return 0; } + public String inputNumber(){ + System.out.println("세자리 숫자를 입력해주세요 : "); + Scanner scanner = new Scanner(System.in); + int input = 0; + try { + input = scanner.nextInt(); + }catch (Exception e){ + System.out.println("문자열 말고 숫자만 입력 가능합니다."); + return inputNumber(); + } + if(input < 100 || input > 999){ + System.out.println("3자리 숫자만 입력 가능합니다. "); + return inputNumber(); + } + return String.valueOf(input); + } + + public int[] splitNumber(String userNumber){ + int[] numberArray = new int[3]; + for(int i=0;i<3;i++){ + numberArray[i] = Integer.parseInt(String.valueOf(userNumber.charAt(i))); + } + return numberArray; + } + } diff --git a/src/main/java/baseball/CreateNumber.java b/src/main/java/baseball/CreateNumber.java index 86bf023fb..9cd972396 100644 --- a/src/main/java/baseball/CreateNumber.java +++ b/src/main/java/baseball/CreateNumber.java @@ -8,18 +8,19 @@ public class CreateNumber { public int createRandomNumber(List numberList) { Random random = new Random(); - if(numberList.contains((random.nextInt(9)+1))){ - createRandomNumber(numberList); + int randomNumber = random.nextInt(9)+1; + if(numberList.contains(randomNumber)){ + return createRandomNumber(numberList); } - return random.nextInt(9)+1; + return randomNumber; } public List makeRandomNumbers() { List numberList = new ArrayList<>(); for (int i = 0; i < 3; i++) { - numberList.add(createRandomNumber(numberList)); + int a = createRandomNumber(numberList); + numberList.add(a); } - System.out.println(numberList); return numberList; } }