JAVA/문제풀이
컬랙션 프레임워크 연습 문제 1(베이스볼게임)
inderrom
2022. 10. 28. 01:24
베이스볼
package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
/*
문제) 숫자 야구 게임 프로그램을 작성하시오.
컴퓨터의 숫자는 난수를 이용하여 구한다. (이 때 Set을 이용한다.)
(스트라이크는 S, 볼은 B로 나타낸다.)
예시)
컴퓨터의 난수 ==> 9 5 7
실행예시) 숫자랑 자리가 같으면 스트라이크 자리가 다르지만 숫자가 같으면 볼
숫자입력 => 3 5 9
3 5 9 => 1S 1B
숫자입력 => 7 8 9
7 8 9 => 0S 2B
숫자입력 => 9 7 5
9 7 5 => 1S 2B
숫자입력 => 9 5 7
9 5 7 => 3S 0B
축하합니다...
당신은 4번째만에 맞췄습니다.
*/
public class BaseBallTest {
private List<Integer> comList; // 컴퓨터의 난수가 저장될 List변수
private List<Integer> userList; // 사용자가 입력한 값이 저장될 List변수
private int strike; // 스트라이크 갯수
private int ball; // 볼의 갯수
private Scanner scan = new Scanner(System.in);
// 1 ~ 9 사이의 중복되지 않는 난수 3개를 만드는 메서드 (Set 이용한다.)
public void createNum() {
Set<Integer> numSet = new HashSet<Integer>();
// 1 ~ 9사이의 난수 3개 만들기
Random rnd = new Random();
while (numSet.size() < 3) {
numSet.add(rnd.nextInt(9) + 1);
}
// 만들어진 난수를 List에 저장한다.
comList = new ArrayList<Integer>(numSet);
// List의 데이터를 섞어준다. (set이 이상한게 알아서 지들이 정렬되는 거 같음)
Collections.shuffle(comList);
}
// 사용자로부터 서로 다른 정수 3개를 입력받아서 List에 저장하는 메서드
public void inputUserNum() {
int n1, n2, n3; // 입력한 정수가 저장될 변수 선언
do { // 숫자 세개가 떨어져서 나오게 하려구
System.out.println("숫자 입력 => ");
n1 = scan.nextInt();
n2 = scan.nextInt();
n3 = scan.nextInt();
// scan.nextLine() 빼놓고 next~()는 띄어쓰기, 탭,엔터로 데이터를 구분한다.
// 그래서 띄어쓰기, 탭,엔터 값을 빼고 데이터만 가져가게 된다
// 키 - 입력버퍼- 컴
// nextLine()의 경우는 마지막에 엔터키도 데이터로 보고 같이 가져간다.
if (n1 == n2 || n1 == n3 || n2 == n3) { // 중복된거 없애기
System.out.println("입력한 값에는 중복되는 데이터가 있습니다. 다시 입력하세요");
}
} while (n1 == n2 || n1 == n3 || n2 == n3);
// 입력한 데이터를 List에 추가한다.
userList = new ArrayList<Integer>();
userList.add(n1);
userList.add(n2);
userList.add(n3);
}
// 스트라이크와 볼을 판정하고 결과를 출력하는 메서드
public void ballCount() {
strike = ball = 0; // 스트라이크와 볼의 개수 초기화
for (int i = 0; i < userList.size(); i++) {
for (int j = 0; j < comList.size(); j++) {
if (userList.get(i) == comList.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() {
System.out.println(" **숫자 야구 게임 **");
System.out.println();
// 컴퓨터의 난수 만들기
createNum();
// System.out.println("확인용 ==> " + comList);
int cnt = 0; // 몇번만에 맞췄는지를 저장하는 변수
do {
cnt++;
inputUserNum(); // 값 입력
ballCount(); // 볼카운트 처리
} while (strike != 3); // 3 스트라이크가 될 때까지 반복처리..
System.out.println();
System.out.println("축하합니다...");
System.out.println("당신은 " + cnt + "번째만에 맞췄습니다...");
}
public static void main(String[] args) {
new BaseBallTest().startGame();
}
}