사용자가 입력한 로또 번호와
컴퓨터가 만들어낸 로또번호를 비교하여
사용자 숫자: [##, ##, ##, ##, ##, ##,]
컴퓨터 숫자: [##, ##, ##, ##, ##, ##,]
총 맞춘 숫자: #개
등수: #등
이 출력되는 프로그램을 작성하시오.
- 등수기준 -
6개 - 1등
5개 - 2등
4개 - 3등
3개 - 4등
2개 - 5등
package day0310;
import java.util.Scanner;
import java.util.Random;
public class LottoGames05 {
static final int SIZE = 6;
static final int NUM_MIN = 1;
static final int NUM_MAX = 45;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Random random = new Random();
// 컴퓨터 숫자를 저장할 배열 computerArray
int[] computerArray = new int[SIZE];
// 사용자 숫자를 저장할 배열 userArray
int[] userArray = new int[SIZE];
// 입력할 index를 저장할 int 변수 idx
int idx = 0;
// 1. 컴퓨터 숫자배열 숫자 넣기
// A. while()사용해서 idx가 6보다 작은 동안
// 랜덤 숫자 생성해서 배열에 없으면 추가
while(idx < SIZE) {
//random의 nextInt를 사용하여 랜덤한 숫자를 하나뽑아서 int randomNumber에 저장한다.
int randomNumber = random.nextInt(6)+1;
//만약 randomNumber가 computerArray에 이미 존재하면 false, 그 외에는 true의 값을 갖는 boolean numberChecker;
boolean numberChecker = true;
//for문을 사용하여 computerArray의 각 엘리먼트를 체크해서
// 만약 randomNumber와 값이 같은 엘리먼트가 있을경우 numberChecker의 값을 false로 할당한다.
for(int i = 0; i < computerArray.length; i++) {
if(randomNumber == computerArray[i]) {
numberChecker = false;
break;
}
}
//numberChecker의 저장된 값이 true일 경우에는 해당 숫자가 중복이 아니라는 의미이므로
//computerArray의 idx 인덱스에 randomNumber를 할당해주고
//idx++해준다
if(numberChecker) {
computerArray[idx] = randomNumber;
idx++;
}
}
// B. for() 사용해서 정렬
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. 사용자 숫자 배열 숫자 넣기
idx = 0;
// A. while() 사용해서 idx가 6보다 작은동안
// 사용자한테 숫자 입력 받아서 올바른 범위에 속하고 배열에 없으면 추가
while(idx < SIZE) {
// 1. 사용자한테 숫자를 입력 받는다.
System.out.println((idx+1)+ "번째 숫자");
System.out.print(">");
int userNumber = scanner.nextInt();
// 사용자의 숫자가 중복인지 아닌지를 확인하여 중복이면false, 아니면 true를 할당 받는 boolean변수 inputChecker
boolean inputChecker = true;
//2. 사용자의 숫자를 검증하고, 올바르지 않으면 다시 입력 받는다
while(!(userNumber >= NUM_MIN && userNumber <= NUM_MAX)) {
System.out.println("잘못된 값입니다.");
System.out.println((idx+1)+ "번째 숫자");
System.out.print(">");
userNumber = scanner.nextInt();
}
//3. 사용자의 숫자가 중복인지 체크한다.
for(int i=0; i< userArray.length; i++) {
if(userNumber == userArray[i]) {
inputChecker = false;
break;
}
}
//4. 중복이 아니면 idx칸에 할당하고 idx++, 중복이면 경고메세지만 출력
if(inputChecker) {
userArray[idx] = userNumber;
idx++;
}else {
System.out.println("이미 입력된 중복 숫자입니다.");
}
}
// B. for() 사용해서 정렬
for(int i = 0; i < userArray.length -1; i++) {
if(userArray[i] > userArray[i+1]) {
int temp = userArray[i];
userArray[i] = userArray[i+1];
userArray[i+1] = temp;
}
}
// 3. 몇개가 맞았는지 확인
//맞은 갯수를 저장할 int count
int count = 0;
for(int i = 0; i < userArray.length;i++) {
for(int j = 0; j < computerArray.length; j++) {
if(userArray[i] == computerArray[j]) {
// 사용자 배열의 i번째 숫자가
// computerArray j번째 숫자와 같다라는 의미이므로
//count를 1 증가 시킨다
count++;
}
}
}
// 4. 결과 출력
System.out.printf("사용자의 숫자: [%2d, %2d, %2d, %2d, %2d, %2d]\n", userArray[0], userArray[1], userArray[2], userArray[3], userArray[4], userArray[5]);
System.out.printf("컴퓨터의 숫자: [%2d, %2d, %2d, %2d, %2d, %2d]\n", computerArray[0], computerArray[1], computerArray[2], computerArray[3], computerArray[4], computerArray[5]);
System.out.println("맞은갯수:"+ count+ "개");
System.out.println("등수:"+ (SIZE - count + 1) + "등");
scanner.close();
}
}
'JAVA > 국비 공부' 카테고리의 다른 글
3월10일 수업(학생관리프로그램) (0) | 2021.03.11 |
---|---|
3월10일수업(별찍기01) (0) | 2021.03.11 |
3월10일수업(로또04) (0) | 2021.03.11 |
3월9일(로또 02 해설) (0) | 2021.03.09 |
3월9일 수업(로또03) (0) | 2021.03.09 |