HashSet野球ゲーム

3018 ワード

package kr.or.ddit.basic;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class SemBase {

	ArrayList<Integer> numList;//난수가 저장될 list
	ArrayList<Integer> userList; //사용자가 입력한 값이 저장될 list
	
	int strike, ball;
	
	Scanner scan = new Scanner(System.in);
	
	
	//1~9 사이의 서로 다른 난수 3개를 만들어서 List에 저장하는 메서드
	//Set을 이용한다.
	public void getNum(){
		Set<Integer> numSet = new HashSet<Integer>();
		
		//1~9사이의 난수 3개 만들기
		while(numSet.size() < 3){
			numSet.add((int)(Math.random() * 9 + 1));
		}
		
		//만들어진 난수를 List에 저장하기
		numList = new ArrayList<>(numSet);
		
		//List의 데이터를 섞어준다.
		Collections.shuffle(numList);
		
	}
	
	//사용자로부터 3개의 정수를 입력받아 List에 저장하는 메서드
	//입력한 정수는 중복되지 않게 한다.
	public void inputNum(){
		int n1,n2,n3; //입력한 정수가 저장될 변수 선언
		
		do{
			System.out.print("숫자입력 => ");
			n1 = scan.nextInt();
			n2 = scan.nextInt();
			n3 = scan.nextInt();
			
			if(n1 == n2 || n1 == n3 || n2 == n3){
				System.out.println("중복되는 숫자는 입력할 수 없습니다.");
				System.out.println("다시 입력하세요.");
			}
		}while(n1 == n2 || n1 == n3 || n2 == n3);//같으면 반복
		
		//입력받은 데이터를 List에 저장한다.
		userList = new ArrayList<>();//리스트에 숫자 세개
		userList.add(n1);
		userList.add(n2);
		userList.add(n3);
	}
	
	//스트라이크와 볼을 판정하고 출력하는 메서드
	 public void ballCount(){
		strike = 0;
		ball = 0; //스트라이크과 볼의 개수 초기화
		
	for (int i = 0; i < numList.size(); i++) {
		for (int j = 0; j < userList.size(); j++) {
			if(numList.get(i) == userList.get(j)){ //값이 같은지 검사
				if(i == j){//위치가 같은것
					strike++;
				}else{
					ball++;
				}
			}
		}
	}
	//볼 카운트 결과 출력하기
	System.out.println(userList.get(0)+ ", "+ userList.get(1)
			+ ", " +userList.get(2)+ "=>"+strike + "S "
			+ ball + "B");
	}
	
	
	//게임을 진행하는 메서드
	public void startGame(){
		//난수를 만드는 메서드 호출
		getNum();
		
		//확인용 출력
		System.out.println("컴퓨터 난수 : " + numList);
		
		int cnt = 0; //몇번 만에 맞췄는지를 저장하는 변수
		
		do{//반복
			cnt++;//횟수 증가
			inputNum();//사용자 입력용 메서드 호출
			ballCount();//볼카운트 구하기
			
		}while(strike != 3); //3 스트라이크가 될 때까지 반복
		
		System.out.println();
		System.out.println("축하합니다.");
		System.out.println("당신은"+cnt+"번째만에 맞췄습니다.");
		
	}
	
	public static void main(String[] args) {
		SemBase test = new SemBase();
		test.startGame();
	}
    }