문제) Set을 이용하여 숫자 야구 게임 프로그램을 작성하시오.
컴퓨터의 숫자는 난수를 이용하여 구한다.
(스트라이크는 S, 볼은 B로 나타낸다)
예시) 컴퓨터의 난수 ==> 9 5 7
실행예시)
숫자입력 ==> 3 5 6
3 5 6 ==> 1S 0B
숫자입력 ==> 7 8 9
7 8 9 ==> 0S 2B
축하합니다 당신은 4번째만에 맞췄습니다.
public class BaseBallTest {
ArrayList<Integer> numList; //난수가 저장될 List
ArrayList<Integer> userList; //사용자가 입력한 값이 저장될 List
private int strike; //스트라이크 개수
private int ball; //볼 개수
Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
/*
BaseBallTest test = new BaseBallTest();
test.gameStart();
*/
new BaseBallTest().gameStart();
}
//게임이 시작되는 메서드
public void gameStart(){
getNum();
//확인용으로 만들어진 난수를 출력한다.
System.out.println("컴퓨터 난수 : " + numList);
}
1~9사이의 서로 다른 난수 3개를 만들어서 List에 저장하는 메서드 (Set이용)
private void getNum(){
Set<Integer> numSet = new HashSet<>();
//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에 저장하는 메서드
//입력한 값은 서로 중복되지 않게 한다.
private 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);
}
스트라이크와 볼의 개수를 구하고 이 값을 출력하는 메서드
private void ballCount(){
strike = 0;
ball = 0; //스트라이크와 볼의 개수 초기화
for(int i=0; i<userList.size(); i++){
for(int j=0; j<numList.size(); j++){
if(userList.get(i) == numList.get(j)){
if(i==j){ //위치가 같은지 비교
strike++;
}else{
ball++;
}
}
}
}
}
System.out.println(userList.get(0)+","+userList.get(1)+","+userList.get(2)
+ "==> " + strike +"S "+ball+"B");
```