로또 게임 최종판
사용자로부터 몇번을 할건지 입력을 받고
그리고 각 게임을 수동으로 할지 자동으로 할지 입력 받아서
최종적으로 컴퓨터의 숫자와 대비하여 각 게임의 맞춘 갯수 등수를 출력하게 만드시오.
예시
몇번 플레이하시겠습니까? 5
1번 게임을 수동/자동 중 어떤걸로 하시겠습니까?(1: 수동 2: 자동)
2
2번 게임을 수동/자동 중 어떤걸로 하시겠습니까?(1: 수동 2: 자동)
1
첫번째 숫자를 입력해주세요: 33
....
5번 게임을 수동/자동 중 어떤걸로 하시겠습니까?(1: 수동 2: 자동)
2
컴퓨터의 숫자: [##, ##, ##, ##, ##, ##]
사용자의 숫자
1번 게임: [##, ##, ##, ##, ##, ##] - 4개 3등
1번 게임: [##, ##, ##, ##, ##, ##] - 5개 2등
1번 게임: [##, ##, ##, ##, ##, ##] - 6개 1등
1번 게임: [##, ##, ##, ##, ##, ##] - 3개 4등
1번 게임: [##, ##, ##, ##, ##, ##] - 0개 등수 없음
package day0311;
import java.util.Scanner;
import java.util.Random;
public class LottoGame {
static final int NUMBER_SIZE = 6;
static final int NUMBER_MAX = 45;
static final int NUMBER_MIN = 1;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Random random = new Random();
// 컴퓨터 숫자 추첨
// 컴퓨터의 숫자를 저장할 int[] computerArray 만들기
int[] computerArray = new int[NUMBER_SIZE];
// 현재 computerArray의 몇번 인덱스에 값을 저장할지를 할당한 int 변수 index
int index = 0;
// index 변수의 할당된 값이 SIZE 보다 작은 동안,
// while을 이용하여 computerArray의 index번 인덱스에 random이 생성한 숫자를
// 기존 배열에 없을 때에만 추가하고 index의 값을 1 증가시킨다.
while (index < NUMBER_SIZE) {
// 랜덤한 숫자를 만들어준다.
int randomNumber = random.nextInt(NUMBER_MAX) + 1;
// 만약 해당 randomNumber가 배열에 존재하지 않으면 true, 존재하면 false가 되는
// boolean inputSwitch 를 만들고 true로 초기화해준다.
boolean inputSwitch = true;
// for 문을 사용하여, randomNumber의 값과 computerArray의 엘리먼트 중
// 같은 값을 가진 엘리먼트가 있으면 inputSwitch를 false로 바꾸고
// for 문을 break한다.
for (int i = 0; i < computerArray.length; i++) {
if (randomNumber == computerArray[i]) {
inputSwitch = false;
break;
}
}
// 만약 inputSwitch의 값이 true라는 것은
// randomNumber의 값이, 중복이 아니라는 의미이므로
// computerArray의 index번 칸에
// randomNumber를 할당해준다.
if (inputSwitch) {
computerArray[index] = randomNumber;
index++;
}
}
// 사용자가 총 몇게임 할지 입력 받는다.
System.out.println("몇번 플레이하시겠습니까?");
System.out.print("> ");
int userGameSize = scanner.nextInt();
// 사용자가 입력한 숫자를 토대로 해서
// 2차원 배열을 만든다.
int[][] userArrays = new int[userGameSize][NUMBER_SIZE];
// 사용자가 입력한 게임 숫자에 따라서 수동 혹은 자동을 선택하게 하고
// 그거에 맞춰서 숫자를 배분한다.
for (int i = 0; i < userArrays.length; i++) {
System.out.println();
System.out.println("=============" + (i + 1) + "번 게임===============");
System.out.println("1. 수동 2. 자동");
System.out.print("> ");
int userChoice = scanner.nextInt();
// 매 게임의 입력할 위치를 저장할 index의 값을 0으로 초기화해준다.
index = 0;
if (userChoice == 1) {
// 사용자로부터 중복되지 않은 1~45 사이의 숫자를 입력 받아서
// index가 각 게임 배열의 크기보다 작은 동안
// index번 칸에 초기화해준다.
while (index < userArrays[i].length) {
// 사용자한테 숫자를 선택 받아서
// 1~45의 범위에 속하고 중복되지 않은 숫자인지 체크하여
// 아닐 경우에는 다시 입력해달라고 하자
System.out.println((index + 1) + "번 숫자를 입력해주세요");
System.out.print("> ");
int userNumber = scanner.nextInt();
// 해당 숫자가 유효한 범위에 속하고 중복되지 않은 숫자이면 true,
// 그외엔 false가 할당되는 boolean 변수 inputSwitch
// 이번 경우에는 inputSwitch의 초기화 값이
// 단순히 true가 아니라
// 사용자가 입력한 숫자가 1~45 범위 안에 속하는지를
// 비교연산자와 논리연산자를 사용하여
// 그 결과값을 그대로 넣어주자
boolean inputSwitch = userNumber >= NUMBER_MIN && userNumber <= NUMBER_MAX;
// for문을 사용해서, userNumber와 중복되는 숫자가 있으면 inputSwitch의 값을 false로 바꾸고
// break 해주자
for (int j = 0; j < userArrays[i].length; j++) {
if (userNumber == userArrays[i][j]) {
inputSwitch = false;
break;
}
}
if (inputSwitch) {
userArrays[i][index] = userNumber;
index++;
} else {
System.out.println("잘못된 숫자입니다.");
System.out.println("다시 입력해주세요");
}
}
} else {
// 사용자가 자동으로 골랐을 경우
// 컴퓨터의 랜덤 숫자 코드와 매우 유사하지만
// 저장되는 위치가 computerArray[index] 가 아니라
// userArrays[i][index] 로 바뀔 뿐이다.
while (index < NUMBER_SIZE) {
// 랜덤한 숫자를 만들어준다.
int randomNumber = random.nextInt(NUMBER_MAX) + 1;
// 만약 해당 randomNumber가 배열에 존재하지 않으면 true, 존재하면 false가 되는
// boolean inputSwitch 를 만들고 true로 초기화해준다.
boolean inputSwitch = true;
// for 문을 사용하여, randomNumber의 값과 computerArray의 엘리먼트 중
// 같은 값을 가진 엘리먼트가 있으면 inputSwitch를 false로 바꾸고
// for 문을 break한다.
for (int j = 0; j < userArrays[i].length; j++) {
if (randomNumber == userArrays[i][j]) {
inputSwitch = false;
break;
}
}
// 만약 inputSwitch의 값이 true라는 것은
// randomNumber의 값이, 중복이 아니라는 의미이므로
// userArrays[i]의 index번 칸에
// randomNumber를 할당해준다.
if (inputSwitch) {
userArrays[i][index] = randomNumber;
index++;
}
}
}
}
// 정렬하는 코드
// 1. 컴퓨터 배열 정리하기
for (int i = 0; i < computerArray.length - 1; i++) {
if (computerArray[i] > computerArray[i + 1]) {
int temp = computerArray[i];
computerArray[i] = computerArray[i + 1];
computerArray[i + 1] = temp;
i = -1;
}
}
//2.사용자의 각 배열 정리하기
for(int i = 0; i < userArrays.length; i++) {
for(int j = 0; j < userArrays[i].length -1; j++) {
if(userArrays[i][j] > userArrays[i][j+1]) {
int temp = userArrays[i][j];
userArrays[i][j] = userArrays[i][j+1];
userArrays[i][j+1] = temp;
j = -1;
}
}
}
// 컴퓨터의 숫자와
// 사용자의 게임내역을 비교해서
// 맞춘갯수 + 등수 까지, 보여준다.
// 1. 컴퓨터의 숫자를 [##, ## .... ##] 으로 보여준다.
System.out.printf("컴퓨터의 숫자: [%2d, %2d, %2d, %2d, %2d, %2d]\n", computerArray[0], computerArray[1],
computerArray[2], computerArray[3], computerArray[4], computerArray[5]);
// 2. 사용자의 숫자를
// 게임 ##번: [##, ##, .... ##], 맞춘갯수: ##개, 등수: #개
// 의 형식으로 출력해준다.
for (int i = 0; i < userArrays.length; i++) {
// 1. 등수를 위하여, 사용자의 i번째 배열의 값과
// computer의 숫자를 비교하여, 몇개나 일치하는지
// 갯수를 센다.
int count = 0;
for (int j = 0; j < userArrays[i].length; j++) {
for (int k = 0; k < computerArray.length; k++) {
if (userArrays[i][j] == computerArray[k]) {
count++;
}
}
}
System.out.printf("게임 %2d번: [%2d, %2d, %2d, %2d, %2d, %2d] 맞춘 갯수: %2d개, ", i + 1, userArrays[i][0],
userArrays[i][1], userArrays[i][2], userArrays[i][3], userArrays[i][4], userArrays[i][5], count);
if (count >= 2) {
System.out.println("등수: " + (NUMBER_SIZE - count + 1) + "등");
} else {
System.out.println("등수: 등수 없음");
}
}
scanner.close();
}
}
'JAVA > 국비 공부' 카테고리의 다른 글
3월11일수업( (0) | 2021.03.11 |
---|---|
3월11일 수업(예제 풀이) (0) | 2021.03.11 |
별 찍기 (3월11일) (0) | 2021.03.11 |
별 찍기(3월11일) (0) | 2021.03.11 |
3월11일 수업(별 찍기05) (0) | 2021.03.11 |