일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- pyqt
- 맥
- 반복문
- python
- spring
- Mac
- Error
- Java
- html
- Android
- crud
- nodejs
- 자바
- jsp
- 배열
- 이클립스
- 대덕인재개발원
- ibatis
- JDBC
- 자바문제
- 객체지향
- ddit
- Oracle
- 단축키
- servlet
- Homebrew
- 생활코딩
- 컬렉션프레임워크
- FastAPI
- API
Archives
- Today
- Total
romworld
컬랙션 프레임워크 연습 문제 1(베이스볼게임) 본문
베이스볼
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();
}
}
'JAVA > 문제풀이' 카테고리의 다른 글
컬렉션 프레임워크 연습문제3(전화번호부) (0) | 2022.10.28 |
---|---|
컬렉션 프레임워크 연습문제2(로또 프로그램) (0) | 2022.10.28 |
컬렉션 프레임워크 문제 (List, Map) (0) | 2022.10.10 |
Chapter 07 상속 문제 풀이 ( Human, 도형클래스, Bank) (0) | 2022.10.10 |
Chepter 06. 객체지향 프로그래밍 클래스 문제 (Circle, Time, Plane, NewCar) (1) | 2022.09.23 |
Comments