과제) BaseBallGame
내용: 임의의수 3자리의 숫자를 맞추는 게임
123
134
1S1B
-> 같은자리의 숫자 일치 => 스트라이크 S
-> 서로다른자리 숫자 일치 => 볼 B
게임의 종료 -> 3Strike
1. 중복되지 않는 1-9 난수 3개를 구한다. => 배열
2. 키보드로 부터 3개의 숫자를 입력 받는다. => 배열
3. 스트라이크, 볼의 갯수를 체크
4. 결과 출력
5. 8번째 성공
알고리즘 방식
BaseBall 클래스 내부에 2개의 Method (1. 1~9로 이루어진 3자리 수의 난수를 생성하는 Method,
2. 3자리수를 입력받아 정답여부를 확인하는 Method) 를 생성한다.
1. 1~9로 이루어진 3자리 수의 난수를 생성하는 Method (make_answer)
- 난수 생성 함수( Math.random() )
- static Method로 0이상 1미만의 무작위 값을 double로 리턴
- min 이상 max 미만인 정수의 난수 출력 :
int make_num = (int) ((Math.random() * (max - min)) + min);
//0 <= Math.random() < 1
//0 <= Math.random() * (max - min) < max-min
//min <= Math.random() * (max - min) + min < max
- 변수 설명
int[] arr = new int[10] : 숫자가 사용되었으면 해당 인덱스의 값을 1로 바꿈
int[] answer = new int[3] : 정답 3자리수가 순서대로 저장
int input = scan.nextInt() : 3자리 숫자를 입력받아 저장
- num_cnt번째 숫자 생성 과정 ( num_cnt = 0~2)
Math.random() 을 통해 1~9사이의 숫자를 1개 생성한 후 중복 여부를 arr[num_cnt]값을 통해 판단,
중복(arr[num_cnt] == 1)이라면 새로운 난수(make_num)를 생성하고,
중복(arr[num_cnt] == 0)되지 않았다면, arr[num_cnt] = 1, answer[num_cnt] = make_num;
2. 3자리수를 입력받아 정답여부를 확인하는 Method (find_answer)
- 변수 설명
int cnt = 0 : 시도 횟수 카운트
int S = 0, int B = 0; Strike와 Ball의 개수 카운트
- input의 Strike와 Ball 개수 및 정답 여부 확인
나머지 연산을 통해 1의 자리 수 부터 answer[2]와 비교 후 일치하면 S++;
answer[2]와 일치하지 않지만 arr[]을 통해 해당 숫자 사용 여부 확인, 사용되었다면, B++;
위 과정을 100의 자리 수까지 반복 후, S == 3 이라면 시도 횟수 (cnt) 와 정답 출력
S != 3 이라면 Strike 개수 (S) 와 Ball 개수 (B) 출력 후, find_answer 반복
결과 화면
소스코드
package kosta.oop;
import java.util.Scanner;
public class BaseBallGame_Main {
public static void main(String[] args){
BaseBall baseBall = new BaseBall();
while(true){
baseBall.make_answer();
baseBall.find_answer();
}
}
}
<BaseBallGame_Main.java>
package kosta.oop;
import java.util.Arrays;
import java.util.Scanner;
public class BaseBall {
Scanner scan = new Scanner(System.in);
int[] arr = new int[10];
int[] answer = new int[3];
public void make_answer() {
Arrays.fill(arr, 0);
int max = 10;
int min = 1;
int num_cnt = 0;
System.out.println("3자리수 난수를 생성합니다.");
while (num_cnt != 3) {
int make_num = (int) ((Math.random() * (max - min)) + min);
if (arr[make_num] == 0) {
arr[make_num]++;
answer[num_cnt] = make_num;
num_cnt++;
}
}
System.out.printf("(속닥속닥)정답 : %d%d%d\n", answer[0], answer[1], answer[2]);
//String answer_str = Integer.toString(answer);
}
public void find_answer() {
int cnt = 0;
while (true) {
int S = 0;
int B = 0;
System.out.println("중복되지 않는 3자리의 숫자를 입력해주세요.");
int input = scan.nextInt();
for (int i = 2; i >= 0; i--) {
int buf = input % 10;
input /= 10;
if (buf == answer[i])
S++;
else if (arr[buf] == 1)
B++;
}
cnt++;
if (S == 3) {
System.out.println(cnt + "번째만에 성공하였습니다.");
System.out.println("-------------------------");
return;
} else
System.out.println(S + "S" + B + "B");
}
}
}
<BaseBall.java>
'프로젝트 > kosta_project' 카테고리의 다른 글
[중간프로젝트]ERP - 마이페이지 (0) | 2022.05.09 |
---|---|
[HTML] 웹페이지 개선 (0) | 2022.04.07 |
[Data Modeling] 중고장터 (0) | 2022.03.18 |
[Data Modeling] Book Store (0) | 2022.03.16 |
[Mini_Project] 온라인 서점 구현하기 (0) | 2022.03.03 |
댓글