본문 바로가기

Java/java 기초

베이스볼 게임 (메소드 분리)

확실히 학원에서 해설이 훨씬 깔끔해 보인다.. 참고하고 깔끔하게 짜보도록해야겟다.

 

 

학원 해설 버전

package baseball;

import java.util.Scanner;

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

		/*
		 * 2군데 이상 필요하면 메인에 선언되어있는것이 좋다
		 * 
		 * 1. 초기화
		 * 
		 * 2. random 산출
		 * 
		 * //////////////////// loop
		 * 
		 * 3. user input
		 * 
		 * 4. 판정
		 * 
		 * 5. 메시지
		 * 
		 * ///////////////////// 6. 결과
		 * 
		 */
		int r_num[], u_num[];
		boolean clear;
//		int count = 0;

		// 초기화
		r_num = new int[3];
		u_num = new int[3];
		clear = false;

		// 2. random 산출
		ballRandom(r_num);

		int w = 0;
		while (w < 10) {
			// 3. user input
			u_num = userInput(u_num);
			
			//4. 판정
			int message[] = new int[2];
			
			clear = finding(r_num, u_num, message);
			
			if(clear) break;
			
			
			// 5.메시지
			System.out.println(message[0] + "스트라이크 " + message[1] + "볼입니다.");
			w++;
			
		}
		
			// 6. 결과
		if(clear) {
			System.out.println("Game Clear!!");
		} else {
			System.out.println("Game Over..");
		}

	}

	static void ballRandom(int r_num[]) {
		boolean _switch[] = new boolean[10]; // 스위치를 넣어서 중복을 방지해주는 코드
		int w, r;

		_switch[0] = true;
		w = 0;
		while (w < 3) {
			r = (int) (Math.random() * 10);
			if (_switch[r] == false) {
				_switch[r] = true; // fftff fffff
				r_num[w] = r + 1; // 1 ~ 10
				w++;
			}
		}

		for (int i = 0; i < r_num.length; i++) {
			System.out.println("r_num[" + i + "] = " + r_num[i]);
		}
	}

	// 사실 리턴받을 필요는 없다
	static int[] userInput(int unum[]) {
		Scanner scanner = new Scanner(System.in);
		while (true) {
			for (int i = 0; i < unum.length; i++) {
				System.out.println((i + 1) + "번째 수 = ");
				unum[i] = scanner.nextInt();
			}
			if (unum[0] != unum[1] && unum[0] != unum[2] && unum[1] != unum[2]) {
				break;
			}
			System.out.println("중복된 숫자가 있습니다");
		}
		return unum;
	}
	
	static boolean finding(int rnum[], int unum[], int message[]) {
		int strike = 0, ball = 0;
		
		// ball
		for (int i = 0; i < rnum.length; i++) {
			for (int j = 0; j < rnum.length; j++) {
				if (rnum[i] == unum[j] && i != j) {
					ball++;
				}
			}
		}
		// strike
		for (int i = 0; i < rnum.length; i++) {
			if (rnum[i] == unum[i]) {
				strike++;
			}
		}
		message[0] = strike;
		message[1] = ball;
		
		if(strike > 2) {
			return true;
		}
		
		return false;
	}
}

내가 짠 버전

 

 

import java.util.Scanner;

public class ex07 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		int r_num[], u_num[];
		boolean clear;
		int strike, ball;
		strike = 0;
		ball = 0;
		int count = 0;
		// 1.초기화
		r_num = new int[3];
		u_num = new int[3];
		clear = false;
		// 2. 랜덤함수 생성
		r_num = randomCreate(r_num);
		main(u_num, r_num, strike, ball, count, clear);
	}

	public static void main(int[] u_num, int[] r_num, int strike, int ball, int count, boolean clear) {
		int w = 0;
		while (w < 10) {

//		  3.user input
			u_num = userInput(u_num);

//		  4.finding
			// ball
			strike = ball = 0;
			ball = ballCount(r_num, u_num, ball);

			// strike
			strike = strikeCount(r_num, u_num, strike);

			// 판정
			if (strike > 2) {
				count = w + 1;
				clear = true;
				break;
			}
			count ++;
			System.out.println(clear);
			System.out.println(count);
			// 메시지
			System.out.println(strike + "스트라이크 " + ball + "볼입니다.");

			if(result(count, clear)){
				break;
			}
			w++;
		
		}
	}

	// 랜덤값 주입
	public static int[] randomCreate(int[] r_num) {
		// 2.random
		boolean _switch[] = new boolean[10]; // 스위치를 넣어서 중복을 방지해주는 코드
		for (int i = 0; i < _switch.length; i++) {
			_switch[i] = false;
		}
		int w = 0;
		int r = 0;
		while (w < 3) {
			r = (int) (Math.random() * 10);
			if (_switch[r] == false) {
				_switch[r] = true; // fftff fffff
				r_num[w] = r + 1; // 1 ~ 10
				w++;
			}
		}

		for (int i = 0; i < r_num.length; i++) {
			System.out.println("r_num[" + i + "] = " + r_num[i]);
		}

		return r_num;
	}

	// 유저값 입력
	private static int[] userInput(int[] u_num) {
		Scanner scanner = new Scanner(System.in);
		while (true) {
			for (int i = 0; i < u_num.length; i++) {
				System.out.println((i + 1) + "번째 수 = ");
				u_num[i] = scanner.nextInt();
			}
			if (u_num[0] != u_num[1] && u_num[0] != u_num[2] && u_num[1] != u_num[2]) {
				break;
			}
			System.out.println("중복된 숫자가 있습니다");
		}
		return u_num;
	}

	private static int ballCount(int[] r_num, int[] u_num, int ball) {
		for (int i = 0; i < r_num.length; i++) {
			for (int j = 0; j < r_num.length; j++) {
				if (r_num[i] == u_num[j] && i != j) {
					ball++;
					
				}
			}
		}
		return ball;
	}

	private static int strikeCount(int[] r_num, int[] u_num, int strike) {
		for (int i = 0; i < r_num.length; i++) {
			if (r_num[i] == u_num[i]) {
				strike++;
			}
		}
		return strike;
	}

	private static boolean result(int count, boolean clear) {
		boolean over = false;
		System.out.println("카운터"+ count);
		if (clear) {
			System.out.println(count + "회 Game Clear!!");
		} else if (count > 3) {
			System.out.println("Game Over..");
			over = true;
		}
		return over;
	}
}