ArrayListを使ったデジタル野球ゲーム


package c_statement;
import java.util.ArrayList;
import e_oop.ScanUtil;
public class Baseball_ArrayList {
public static void main(String[] args) {

	// ArrayList에 중복을 배제한 난수 3개 입력
	ArrayList<Integer> numberList = new ArrayList<Integer>();

	while (true) {

		// 난수 입력
		int r = (int) (Math.random() * 9) + 1;
		if (!(numberList.contains(r))) {
			numberList.add(r);
		}

		if (numberList.size() == 3) { // 난수 3개가 입력되면 종료
			break;
		}
	}

	System.out.print("문제 출력 : "); // 그냥 테스트용
	for (int i = 0; i < numberList.size(); i++) {
		System.out.print(numberList.get(i));

		if (i != numberList.size() - 1) { // 출력을 보기좋게 하기 위함
			System.out.print(", "); // 1, 2, 3의 형태로 출력
		}
	}
	System.out.println();

	// 새 ArrayList 2개 생성
	// answerTemp에 먼저 입력받은 후 answerList에 옮겨 담기 위함
	ArrayList<Integer> answerTemp = new ArrayList<Integer>();
	ArrayList<Integer> answerList = new ArrayList<Integer>();
	int cnt = 0;

	while (true) {
		System.out.print("3자리 숫자 입력 : ");
		int input = ScanUtil.nextInt();

		// % 10, / 10 -> 맨 앞자리부터 가져온다.(입력한 숫자와 반대로 입력됨)
		for (int i = 0; i < 3; i++) {
			answerTemp.add(input % 10);
			input /= 10;
		}

		// 가져온 숫자를 거꾸로 저장하여 원래 숫자와 일치하게 바꾼다.
		for (int i = answerTemp.size() - 1; i >= 0; i--) {
			answerList.add(answerTemp.get(i));
		}

		int strike = 0;
		int ball = 0;
		int out = 0;

		// 문제와 입력의 같은 자리가 일치 - strike
		for (int i = 0; i < answerList.size(); i++) {
			if (answerList.get(i) == numberList.get(i)) {
				strike++;
			}

			// 문제와 입력의 같은 자리가 다르고 다른 자리가 일치 - ball
			for (int j = 0; j < answerList.size(); j++) {
				if (answerList.get(i) != numberList.get(i) && answerList.get(j) == numberList.get(i)) {
					ball++;
				}
			}
		}
		out = 3 - strike - ball;

		System.out.println(++cnt + "차 시도 : " + strike + " strike " + ball + " ball " + out + " out");

		if (strike == 3) {
			System.out.println("정답입니다.");
			break;
		}

		// 다음 회차를 돌기 전에 ArrayList를 초기화한다.
		answerTemp.clear();
		answerList.clear();
	}
}
}