From b520b4b0df5f8096d5fd031f6912fb2c0332ad40 Mon Sep 17 00:00:00 2001 From: hwijaejeong Date: Fri, 21 Jun 2024 18:17:30 +0900 Subject: [PATCH 1/2] =?UTF-8?q?1=EC=B0=A8=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/viewer/BaseballViewer.java | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 src/main/java/viewer/BaseballViewer.java diff --git a/src/main/java/viewer/BaseballViewer.java b/src/main/java/viewer/BaseballViewer.java new file mode 100644 index 0000000000..cc96fba338 --- /dev/null +++ b/src/main/java/viewer/BaseballViewer.java @@ -0,0 +1,2 @@ +package viewer;public class BaseballViewer { +} From 8a87a58750a762be5b1206e1101580f551833ec5 Mon Sep 17 00:00:00 2001 From: hwijaejeong Date: Fri, 21 Jun 2024 18:18:56 +0900 Subject: [PATCH 2/2] =?UTF-8?q?1=EC=B0=A8=20=EC=BB=A4=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 27 +++++ src/main/java/baseball/Application.java | 8 ++ src/main/java/viewer/BaseballViewer.java | 141 ++++++++++++++++++++++- 3 files changed, 175 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index e69de29bb2..9be20c6cc8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,27 @@ +1. 기능을 구현하기 전 docs/README.md에 구현할 기능 목록을 정리해 추가한다. +2. while문을 작성하여 3자리의 컴퓨터 랜덤숫자를 저장 +3. 유저에게 3자리 숫자 값를 전달 받는다(전달받은 값이 Integer 유효성 검사) +4. 컴퓨터의 랜덤 값 과 사용자가 입력한 값 비교 +5. + 6. 자릿수의 숫자와 입렵한 숫자가 같으면 스트라이크 + 6. 자릿수의 숫자와 같지는 않치만 입력한 숫자가 있으면 볼 + 6. 같은 숫자가 하나도 없을 경우 낫싱 +6. 3스트라이크 = 3자리 숫자가 모두 일치 할경우 첫번째 게임 종료 +7. 게임을 재시작 또는 종료를 구분 하여 입력 값 받기 +8. 숫자 야구 게임을 시작합니다. + 숫자를 입력해주세요 : 123 + 1볼 1스트라이크 + 숫자를 입력해주세요 : 145 + 1볼 + 숫자를 입력해주세요 : 671 + 2볼 + 숫자를 입력해주세요 : 216 + 1스트라이크 + 숫자를 입력해주세요 : 713 + 3스트라이크 + 3개의 숫자를 모두 맞히셨습니다! 게임 종료 + 게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요. + 1 + 숫자를 입력해주세요 : 123 + 1볼 + ... \ No newline at end of file diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index dd95a34214..073da34b5a 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,7 +1,15 @@ package baseball; +import viewer.BaseballViewer; + + + public class Application { + public static void main(String[] args) { // TODO: 프로그램 구현 + BaseballViewer baseballViewer = new BaseballViewer(); + + baseballViewer.start(); } } diff --git a/src/main/java/viewer/BaseballViewer.java b/src/main/java/viewer/BaseballViewer.java index cc96fba338..e947c62c31 100644 --- a/src/main/java/viewer/BaseballViewer.java +++ b/src/main/java/viewer/BaseballViewer.java @@ -1,2 +1,141 @@ -package viewer;public class BaseballViewer { +package viewer; + +import camp.nextstep.edu.missionutils.Console; +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.*; + +public class BaseballViewer { + private String message; + //자릿수 + private static int digit = 3; + //제어 + boolean game = true; + //유저번호 + static Listuser = new ArrayList<>(); + //야구번호 + static List baseball = new ArrayList<>(); + //스트라이크 + private static int strike; + // 볼 + private static int ball ; + + + public void start(){ + while (game){ + System.out.println("숫자 야구 게임을 시작합니다."); + gamestart(); + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + int try_again = Integer.parseInt(Console.readLine()); + if(try_again==1){ + baseball = new ArrayList<>(); + game = true; + }else if (try_again==2){ + game = false; + break; + } + } + } + + public static void gamestart(){ + baseball = baseballNum(); + System.out.println(baseball); + while (true){ + System.out.print("숫자를 입력해주세요."); + String input = Console.readLine(); + + // 검증 완료한 값을 user 리스트에 넣어준다 + user = userNum(input); + + //값 비교 + compare(); + + //출력 + if(print()){ + break; + } + } + } + + // 야구 랜덤 숫자 받기 + public static List baseballNum(){ + while (baseball.size() < digit) { + // 1~9자리 랜덤숫자 + int randomNumber = Randoms.pickNumberInRange(1, 9); + //똑같은 수가 아닌 대상만 baseball 더해준다 + if (!baseball.contains(randomNumber)) { + baseball.add(randomNumber); + } + } + return baseball; + } + + // 유저번호 + public static List userNum(String input){ + // 1~9에 숫자이며 3자릿수 입력 제한 + if (!isValid(input)) { + throw new IllegalArgumentException(); + } + String[] user = input.split(""); + ListuserNum = new ArrayList<>(); + //String[] user = new String[]{input}; + for(String u : user){ + userNum.add(Integer.parseInt(u)); + } +// for(int i =0; i< user.length; i++){ +// userNum.add(Integer.parseInt(user[i])); +// } + return userNum; + } + + // 유저 입력 검증 + public static boolean isValid(String input){ + Set seen = new HashSet<>(); + for(int i =0; i < input.length(); i++){ + char num = input.charAt(i); + if(Character.isDigit(num)){ + int digit = Character.getNumericValue(num); + if (digit <1 || digit > 9 || seen.contains(num)){ + return false; + } + seen.add(num); + } else { + return false; + } + } + return seen.size() == digit; + } + + public static void compare(){ + strike = 0; + ball = 0; + for(int i = 0; i < user.size(); i++){ + if(baseball.get(i).equals(user.get(i))){ + strike ++; + } + else if(baseball.contains(user.get(i))){ + ball++; + } + } + } + + public static boolean print(){ + + if(strike == 0 && ball == 0){ + System.out.print("낫싱"); + } + if (ball > 0) { + System.out.print(ball + "볼 "); + } + if (strike > 0 ) { + System.out.print(strike + "스트라이크"); + } + System.out.println(); + if (strike == 3) { + return true; + } + return false; + } + }