Java

숫자야구 확률 줄이기 (진행중)

충 민 2022. 7. 26. 15:15

우리가 흔히 아는 숫자야구게임을 자바로 구현해보는 중이다 

그런데 조금 변형하여 랜덤으로 숫자를 받아 시도 횟수를 줄여보는 방법을 구현하는 프로그램을 만드는 중이다

시도 횟수를 줄이려면 out이 되는 방법인 3개의 숫자가 모두 정답 숫자와 겹치지 않아야한다

package Day_16;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class Baseball {
	 
	    
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		Random rand = new Random();

		// 입력받은 숫자
		int num;//랜덤 정답 숫자
		int num2;//랜덤 도전 숫자
		int temp;
		int temp2;
		int r=0;//도전횟수 카운트
		// 배열로 쪼갬
		int []numArr = new int[3];//랜덤 정답 숫자
		int []numArr2 = new int[3];//랜던 도전 숫자
		
	   

		ArrayList<Integer> a1 = new ArrayList<>();//Arraylist에 숫자 배열 집어넘
		int k=0;
		while(true) {
			a1.add(k);
			if(a1.size()>=10) {
				break;
			}
			k++;
		}
	
		

	//	for(int a=0;a<1000;a++) {//1000번의 게임 실행
			System.out.println("번째 게임 실행");



			int h=0;
			while(h<3) {//str문자열을 numArr의 배열에 하나씩 집어넣기
			
				num=rand.nextInt(9);
				//중복처리
				if(numArr[0]==num) {
					continue;
				}
				else if(numArr[1]==num) {
					continue;
				}
				else {
					numArr[h] = num;//아스키코드에서 48은 0을 뜻함
					h++;
				}
			}//정답 숫자 생성 
			
			System.out.print("정답 숫자: ");
			for(int w=0;w<3;w++) {
				System.out.print(numArr[w]+" ");
			}//정답 숫자 출력
			System.out.println();
			//도전시작
			
	
			while(true) {//5번만에 도전끝내기 

				int strike=0;//스트라이크
				int ball=0;//볼 
				
				int q=0;
				while(q<3) {//str문자열을 numArr의 배열에 하나씩 집어넣기
					Collections.shuffle(a1); //ArrayList안에서 랜덤으로 추출 
					num2=a1.get(0);
					
					//중복처리
					if(numArr2[0]==num2) {
						continue;
					}
					else if(numArr2[1]==num2) {
						continue;
					}
					else {
						numArr2[q] = num2;//아스키코드에서 48은 0을 뜻함
						q++;
					}
				}//도전 숫자 생성 
				
				for(int w=0;w<3;w++) {
					System.out.print(numArr2[w]+" ");
				}//도전 숫자 출력
				
				
				for(int i=0;i<3;i++) { //strike인지 ball인지 판단 
					for(int j=0;j<3;j++) {
						if(numArr[i]==numArr2[j]) {
							if(i==j) {
								strike++;
							}
							else ball++;
						}
					}
				}
				r++;
				System.out.printf(" "+"%dS %dB",strike,ball);
				System.out.println();
				if(strike+ball == 0) {
					for(int i=0;i<3;i++) {
					a1.remove(Integer.valueOf(numArr2[i]));
					}
				}
				if(strike==1){
					
				}
				
				if(strike == 3) {
					System.out.println("\n"+r+"번쨰만에 도전 성공");
					System.exit(-1);
				}
				
				
			}//도전끝







		//}//1000번의 게임for문 괄호  

	}

	
	}