야구게임 배열적용

박성현·2024년 3월 19일

java

목록 보기
24/51

야구게임에 배열을 적용해보자 ! !

  • 빠른실습을 위해 com의 숫자를 먼저 출력 해보았다.
  • 주석에 상세설명을 추가하였다.
package arrayex;

import java.util.Scanner;

/*
규칙 : 1~9 사이의 중복되지 않은 랜덤한 3자리 숫자 맞추기
com : 135
user : 234 => 1Strike 2Out( 3이 숫자,자리수 모두 맞음)
user : 379 => 1Ball 2Out ( 3이 숫자만 맞음)
user : 678 => 3Out ( 맞음 없음)
user : 135 => 3Strike (모두 맞음, 게임 종료 )
 */

public class baseballa {

	public static void main(String[] args) {
		// while문에서 선언하면 지역변수가 되어버리기 때문에 전역변수로 선언해줌
		int com[] = new int[3];
		int user[] = new int[3];
		Boolean check=false;
		while(true) {
			// -0~9미만의 double 형태의 난수를 반환 (*9로 인해)
			// -(int) 형번환으로 인해 소수점 이하를 버리고 정수만 취하는데
			// 8까지 취하므로 +1하여 9까지 취할 수 있음 
			// 랜덤한 값을 3개 받음
			for (int i=0; i<com.length; i++) {
				com[i] = (int)(Math.random()*9)+1;
				System.out.println("com의 숫자는 "+ com[i]);
			}
			// 함수실행하여 값이 같은지 판단해줌
			System.out.println();
			check = isCheck(com);
			if(!check) {
				break;
			}
		}

		//입력받을 수 있도록 해줌
		Scanner sc =new Scanner(System.in);
		String s[] = {"첫","두","세"};

		while(true) {
			int strike = 0, ball = 0, out = 0;
			// 입력받아줄 수 있게 해줌
			// nextInt : 공백이나 엔터 기준으로 넣어줌
			for (int i = 0; i<user.length; i++) {
				System.out.println(s[i]+"번째 숫자를 넣으세요");
				user[i]=sc.nextInt();
			}
			
			
			check = isCheck(user);
			// 함수에서 값이 같으면 true가 리턴되어 온다
//			System.out.println("check = " +check);

			// check 값은 true값이 리턴되었기 때문에 중복값이라는 것을 확인할 수 있음
			if(check) {
				System.out.println("중복값을 넣지마세요 !");
				// 다시 for문을 실행시킴
				continue;
			}

			// user와 com의 값을 비교
			for (int i =0; i<com.length; i++) {
				for (int j=0; j<user.length; j++) {
					// com과 user의 배열위치의 값이 같을때 실행됨
					if (com[i] == user[j]) {
						// 배열 안의 값이 같을때
						if(i==j) {
							strike++;
						} else {
							ball++;
						}
					}
				}
			}
			out = 3 - (strike + ball);
			System.out.printf("== %s 스트라이크, %s 볼, %s 아웃 == \n",strike,ball,out);
			System.out.println("============================");
			if (strike ==3) {
				break;
			}
		}
		System.out.println("스트라이크 아웃이다!!");
	}
	// 배열로 받아와서 입력값이 같은가를 판단
	// 중복값이 있을 시 true, 다를 시 false를 출력
	static boolean isCheck(int[] n) {
		boolean check = false;
		if((n[0]==n[1] || n[0]==n[1] || n[1]==n[2])) {
			check = true;
		}
		return check;
	}


}

결과값 :

profile
개발기록장

0개의 댓글