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/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/BaseballGame.java b/src/main/java/baseball/BaseballGame.java new file mode 100644 index 000000000..27d0f300e --- /dev/null +++ b/src/main/java/baseball/BaseballGame.java @@ -0,0 +1,43 @@ +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 = checkNumber.inputNumber(); + int[] userNumberArray = checkNumber.splitNumber(inputNumber); + result = checkNumber.checkNumber(computerNumberList,userNumberArray); + System.out.println(result%10 + "볼" + result/10 + "스트라이크"); + } + } + + public void endGame(){ + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + } + + public void reGame(){ + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + Scanner scanner = new Scanner(System.in); + int input = scanner.nextInt(); + if(input == 1){ + startGame(); + } + if(input == 2){ + endGame(); + } + } + + + + +} diff --git a/src/main/java/baseball/BaseballMain.java b/src/main/java/baseball/BaseballMain.java new file mode 100644 index 000000000..e5b2f753a --- /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.reGame(); + } +} diff --git a/src/main/java/baseball/CheckNumber.java b/src/main/java/baseball/CheckNumber.java new file mode 100644 index 000000000..68ac12d61 --- /dev/null +++ b/src/main/java/baseball/CheckNumber.java @@ -0,0 +1,52 @@ +package baseball; + +import java.util.List; +import java.util.Scanner; + +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; + } + + 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 new file mode 100644 index 000000000..9cd972396 --- /dev/null +++ b/src/main/java/baseball/CreateNumber.java @@ -0,0 +1,26 @@ +package baseball; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class CreateNumber { + + public int createRandomNumber(List numberList) { + Random random = new Random(); + int randomNumber = random.nextInt(9)+1; + if(numberList.contains(randomNumber)){ + return createRandomNumber(numberList); + } + return randomNumber; + } + + public List makeRandomNumbers() { + List numberList = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + int a = createRandomNumber(numberList); + numberList.add(a); + } + 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 new file mode 100644 index 000000000..7a1e6e3fa --- /dev/null +++ b/src/test/java/baseball/CreateNumberTest.java @@ -0,0 +1,18 @@ +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(); + 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'); + + } + + + + }