오답노트 (Wrong Answer Note)

[자바] 야구게임 만들기

나수비니 2023. 9. 30. 23:21
728x90

* 본 포스팅은 개인공부를 위한 오답노트입니다.

* This posting is an incorrect answer note for personal study.

 

Step.1 문제 정의 (Define the problem)

1 ~ 9의 숫자 중 3가지 숫자 입력 (중복 불가)2. 숫자와 자리가 모두 일치할 경우 Strike3. 자리는 일치하지 않지만 숫자는 일치할 경우 Ball4. 숫자와 자리 모두 일치하지 않을 경우 Out

EX)
정답: 1 7 3
입력: 3 1 5 >>> 2b
입력: 1 5 6 >>> 1s

Step.2 문제 분석 (Analyze the problem)

1. 랜덤 난수를 배열에 중복없이 입력하기

2. 컴퓨터 배열과 유저 입력 배열의 중복 확인하기

3. 스트라이크/볼 판정하기


Step.3 브레인스토밍 (Brainstorm)

1. 변수 선언하기 (Declare a variable)

  • 필요한 것
    1. 유저로부터 정답을 입력받기 위한 Scanner 객체 sc
    2. 컴퓨터로부터 1~9까지의 랜덤한 숫자를 생성할 객체 rd
    3. 컴퓨터로부터 랜덤한 숫자를 담을 int 배열
    4. 유저로부터 입력된 숫자를 담을 int 배열
    5. 볼, 스트라이크, 도전횟수를 카운트 할 변수 3가지

2. 중복없이 1~9까지 범위의 랜덤 숫자를 컴퓨터로부터 생성하기

  • 생각한 것
    1. ArrayList
    2. Array
  • 고려할 것
    1. 컴퓨터가 중복된 숫자를 입력할 경우, 반환하기

3. 유저로부터 3개의 숫자를 입력받기

  • 생각한 것
    1. Scanner 사용

4. 스트라이크/볼/판정하기

  • 생각한 것
    1.  IF문 사용

Step.4 결정 (Make a decision)

1. 랜덤 변수 생성 : Math.random()

2. 스트라이크/볼 판정: for if문


Step.5 실행 (Implement)
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class BaseBallGame5 {
	
	public static void main(String[] args) {

	int[] com = new int[3];
	int[] user = new int[3];
	int count = 10;

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

	//1.중복없이 1~9까지 범위의 랜덤 숫자를 컴퓨터로부터 생성하기
		// 컴퓨터 랜덤난수 1~9까-지 생성
		for(int i=0; i<com.length; i++) {
			com[i] = rd.nextInt((int)(Math.random()*9)+1);		
			//중복 제거
			for(int j=0; j<i; j++) {
				if(com[i] ==  com[j]) {
					i --;
					break;
				}
			}	
		}		
	//2.유저로부터 3개의 숫자를 입력받기
	while(count >0) {
		int strike = 0;
		int ball = 0;
		
		System.out.println("--------");
		System.out.println("숫자를 입력하세요.");
		System.out.println("--------");
		
		for (int i = 0; i < user.length; i++) {
			user[i] = sc.nextInt();
		}
	
		System.out.println("입력한 숫자는" + Arrays.toString(user) + "입니다.");
		
		//3. 스트/볼/아웃 판단하기
		for (int i=0; i<com.length; i++) {
			for(int j=0; j<user.length; j++) {
				if(com[i] == user[j]) {
					if( i == j) {
						strike ++;
				} 
				 else
					ball ++;
				}
			}
		}
		if(strike == 3) {
			System.out.println("승리!");
			break;
		}
		System.out.println("---------");
		
		count--;
		if(count==0) {
			System.out.println("컴퓨터가 승리!");
			break;
		} 
		else {
			System.out.println("strike: " + strike + " ball: " + ball );
			System.out.println(count + ": 잔여 도전기회");			
			}		
		}		
	}
}

Step.6 평가 (Evaluate)

1. HashSet, ArrayList 사용해볼 것

2. 완벽하게 구현하지 못한 것

  • 유저로부터 입력받은 변수 중복 체크