diff --git a/README.md b/README.md index 8d7e8aee..a157d7fe 100644 --- a/README.md +++ b/README.md @@ -1 +1,21 @@ -# java-baseball-precourse \ No newline at end of file +# java-baseball-precourse +<기능구현> +#1. 난수 생성 +-서로 다른 정수 3개로 이루어진 난수 생성 +#2. 사용자에게 3자리 숫자 입력받기 +-중복된 수가 2개이상 들어가있을 경우 알려주고 다시 입력받기 +-3자리보다 적거나 많은 수 입력 시 IllegalArgumentException 을 발생시킨 후 애플리케이션은 종료하기 +#3. 입력된 숫자 체크하기 +-스트라이크: 자리와 숫자가 모두 일치 +-볼: 자리는 맞지않지만 숫자 일치 +-입력할때마다 스트라이크, 볼의 수를 알려주기 +-정답이 아닐 경우 계속 입력받기 +-정답일 경우 1을 입력하면 새로운 게임 다시 시작하고 2를 입력하면 애플리케이션 종료하기 + + +#InputNumber.java: 사용자로부터 입력값을 받는 역할 +#NumberGenerator.java: 정답을 생성하는 역할 +#Check.java: 입력값에 대한 결과를 사용자에게 알려주고 그 다음 수행을 결정한다. +#Main.java: 시작클래스 + + diff --git a/bin/main/.gitkeep b/bin/main/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/bin/main/Check.class b/bin/main/Check.class new file mode 100644 index 00000000..688a9021 Binary files /dev/null and b/bin/main/Check.class differ diff --git a/bin/main/InputNumber.class b/bin/main/InputNumber.class new file mode 100644 index 00000000..bbae03e4 Binary files /dev/null and b/bin/main/InputNumber.class differ diff --git a/bin/main/Main.class b/bin/main/Main.class new file mode 100644 index 00000000..846e4968 Binary files /dev/null and b/bin/main/Main.class differ diff --git a/bin/main/NumberGenerator.class b/bin/main/NumberGenerator.class new file mode 100644 index 00000000..e73833f3 Binary files /dev/null and b/bin/main/NumberGenerator.class differ diff --git a/bin/test/.gitkeep b/bin/test/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/Check.java b/src/main/java/Check.java new file mode 100644 index 00000000..2fba2f29 --- /dev/null +++ b/src/main/java/Check.java @@ -0,0 +1,25 @@ +public class Check { + public static boolean checkAnswer(int[] numArr, int[] inputArr) { + int strike = 0; + int ball = 0; + + for (int i = 0; i < numArr.length; i++) { + for (int j = 0; j < inputArr.length; j++) { + if (numArr[i] == inputArr[j] && i == j) { + strike++; + } else if (numArr[i] == inputArr[j] && i != j) { + ball++; + } + } + } + + if (strike == 3) { + System.out.println(strike + "스트라이크 " + ball + "볼"); + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + return true; + } else {System.out.println(strike + "스트라이크 " + ball + "볼"); + + return false; + } + } +} diff --git a/src/main/java/InputNumber.java b/src/main/java/InputNumber.java new file mode 100644 index 00000000..50896244 --- /dev/null +++ b/src/main/java/InputNumber.java @@ -0,0 +1,39 @@ +import java.util.Scanner; + +public class InputNumber { + public static int[] inputNum(int[] inputArr) { + boolean isDuplicate = false; + Scanner scanner = new Scanner(System.in); + while (true) { + System.out.print("숫자를 입력해주세요 : "); + String input = scanner.next(); + + // 입력된 숫자가 세 자리가 아닌 경우 IllegalArgumentException 발생 + if (input.length() != 3) { + throw new IllegalArgumentException("세 자리 숫자를 입력해주세요."); + } + + // 중복 체크를 위한 배열 + boolean[] digitExists = new boolean[10]; + isDuplicate = false; + + for (int i = 0; i < inputArr.length; i++) { + inputArr[i] = Character.getNumericValue(input.charAt(i)); + int digit = inputArr[i]; + + // 중복된 숫자인지 확인 + if (digitExists[digit]) { + System.out.println("중복된 값을 입력했습니다."); + isDuplicate = true; + break; + } else { + digitExists[digit] = true; + } + } + if (!isDuplicate) { + break; + } + } + return inputArr; + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 00000000..7f7faa0c --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,29 @@ +import java.util.Scanner; +public class Main { + public static void main(String[] args) { + int strike = 0; + int ball = 0; + + int[] numArr = NumberGenerator.generateUniqueRandomNumbers(3); + + Scanner scanner = new Scanner(System.in); + while (true) { + int[] inputArr = new int[3]; // 숫자를 저장할 배열 + + inputArr = InputNumber.inputNum(inputArr); + if (Check.checkAnswer(numArr, inputArr)) { + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + int choice = scanner.nextInt(); + if (choice == 1) { + numArr = NumberGenerator.generateUniqueRandomNumbers(3); + continue; // 게임 새로 시작 + } else if (choice == 2) { + break; // 게임 종료 + } else { + System.out.println("잘못된 입력입니다. 게임을 종료합니다."); + break; + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/NumberGenerator.java b/src/main/java/NumberGenerator.java new file mode 100644 index 00000000..d4a8ef60 --- /dev/null +++ b/src/main/java/NumberGenerator.java @@ -0,0 +1,19 @@ +public class NumberGenerator { + public static int[] generateUniqueRandomNumbers(int length) { + int[] numArr = new int[length]; + boolean[] used = new boolean[10]; // 사용된 숫자를 추적하기 위한 배열 + + for (int i = 0; i < numArr.length; i++) { + int randomNumber; + do { + randomNumber = (int) (Math.random() * 9 + 1); + } while (used[randomNumber]); // 이미 사용된 숫자라면 다시 난수를 생성 + + numArr[i] = randomNumber; + used[randomNumber] = true; + } + + return numArr; + } +} +