숫자야구 만들기

이해찬·2023년 8월 16일
0

항해일지

목록 보기
17/35

23.08.16 D+3

숫자야구 만들기 JAVA

📟 풀이과정

  1. 랜덤숫자를 뽑는다 -> 랜덤숫자를 인덱스별로 비교하기 위해서 배열로 만든다.
  2. 중복되지 않은 랜덤숫자를 만들기 위해서 Set을 사용한다.
  3. 입력값을 배열로 만든다.
  4. for문, 조건문을 통해서 랜덤값과 배열값을 비교하고 strikeball을 판단한다.
  5. 출력값을 설정한다.

1&2. 랜덤숫자 뽑기

public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        Random random = new Random();

        
        Set<Integer> randomNumber = new HashSet<>();

        while (randomNumber.size()<3){
            randomNumber.add(random.nextInt(10));
        }

        Integer[] numRan = new Integer[randomNumber.size()];
        randomNumber.toArray(numRan);

        int numCount = 1;
        int strikeIndex = 0;
        int ballIndex = 0;
}

randomNumber.add(random.nextInt(10)) 0~9까지의 랜덤 수를 배열에 추가
randomNumber.toArray(numRan) 컬렉션을 배열로 바꾸기 -> Set은 순서가 없기때문에 인덱스를 특정할 수 있는 배열로 변환

3. 입력값 배열

while(true) {
            System.out.print(numCount + "번째 시도 : ");
            int num = sc.nextInt();

            String numStr = Integer.toString(num);
            int[] arr = new int[numStr.length()];

            for (int i = 0; i < numStr.length(); i++) {
                arr[i] = Character.getNumericValue(numStr.charAt(i));
            }

입력값 int를 string으로 변환한 뒤, 스트링배열을 하나의 char로 바꾸어서 각 배열에 저장
->arr[i]번째의 인덱스를 numStrchar[i]번째로 변환, "1" -> 숫자 1
->사용자 입력값을 인덱스별로 추출 -> arr

Character.getNumericValue(numStr.charAt(i))
numStr.charAt(i) numStr의 i번째 배열을 ->Character.getNumericValue 숫자로 변환

4&5. 스트라이크 볼 구별, 출력

for (int i = 0; i < numStr.length(); i++) {
                if(numRan[i] == arr[i]){
                    strikeIndex++;
                } else if(randomNumber.contains(arr[i])){
                    ballIndex++;
                }
            }

            if(strikeIndex == 3){
                System.out.println("3S");
            } else if(ballIndex == 3){
                System.out.println("3B");
            } else {
                System.out.println(ballIndex + "B" + strikeIndex + "S");
            }

            if(strikeIndex == 3){
                System.out.println(numCount + "번째 시도만에 맞췄습니다");
                System.out.println("게임을 종료합니다");
                break;
            }

            strikeIndex = 0;
            ballIndex = 0;
            numCount ++
         }

각 인덱스별 숫자가 똑같으면 strike 카운트 , 그렇지 않으면 ball카운트를 하고 그에 따른 출력값 설정
사용자가 다시 시도하기 위해 strikeIndex balLIndex 값 0으로 초기화, ~번째 시도의 카운트를 위해 numCount++

profile
디자인에서 개발자로

0개의 댓글