Lotto.java
[문제] 로또 프로그램 - 자동 번호
1. 1~45까지의 정수형 값을 가진 6개의 배열이다.
2. 중복된 숫자를 가지면 안된다.
3. 오름차순
4. 1줄당 1000원
5. 출력 시 6자리로 맞춘다.
7. 5줄 마다 줄바꿈
package array;
import java.util.Arrays;
import java.util.Scanner;
public class Lotto {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//1. 1~45까지의 정수형 값을 가진 6개의 배열이다.
int[] lotto = new int[6];
int money=0;
int count=0;
System.out.print("계산 : ");
int a = scan.nextInt();
// 4. 1줄당 1000원(나와야 되는 줄의 개수)
money = (int)(a/1000);
for(int k=0; k<money; k++) {
count++; // 실행 count
// 난수 발생
for(int i=0; i<lotto.length; i++) {
lotto[i] = (int)(Math.random()*45+1);
// 2. 중복된 숫자를 가지면 안된다.(중복 체크)
for(int j=0; j<i; j++) {
if(lotto[i] == lotto[j]) {
i--;
break;
}
}
}
// 3. 오름차순
Arrays.sort(lotto); // java.util.Arrays; 추가
for(int data : lotto) {
System.out.print("\t"+data);
}
// 5. 출력시 5자리로 맞춘다.
System.out.println();
// 7. 5줄 마다 줄바꿈
if(count%5==0) System.out.println();
}
}
}
[실행결과]
돈 입력 : 5000
2 4 19 39 43 44
22 26 33 38 39 42
5 6 8 25 45 25
중복 체크
현재 나와있는 숫자가 앞에 숫자들과 똑같은게 있는지 비교해야된다.
비교 방법
가면서 점점 줄어드는 selection sort와는 반대로 lotto는 점점 늘어난다.
selection sort의 반복 조건에는 마지막 데이터가 없는데 lotto는 마지막 데이터까지 실행해야된다.
selection sort ==> i < ar.length-1
lotto ==> i < ar.length
현재 숫자와 앞에 숫자들 비교
if(lotto[i] == lotto[j])
i j
lott[0]
lott[1] == lott[0]
lott[2] == lott[0] / lott[2] == lott[1]
lott[3] == lott[0] / lott[3] == lott[1] / lott[3] == lott[2]
.
.
lott[5] == lott[0] / lott[5] == lott[1] / ... / lott[5] == lott[4]
j 는 매번 0 부터 i-1까지 반복한다.
따라서, for(int j=0; j<i; j++) 로 조건 설정한다.
만약, [앞 숫자들 = 새로 발생한 난수] 일때, (숫자가 중복된 경우)
break로 for문( for(int j=0; j<i; j++) )을 빠져나온다.
하지만 ,
for(int i=0; i<lotto.length; i++)로 다시 갔을 때 i 가 자동으로 증가해서 lotto[i]에 값이 입력되지 않은 상태로 lotto[i+1]에 데이터를 입력하기 시작한다.
따라서, i--; 구문을 입력해서 앞에 수와 비교했을 때 같은 수가 나왔던 i 번째 데이터를 다시 구한다.
for(int i=0; i<lotto.length; i++) {
lotto[i] = (int)(Math.random()*45+1);
// 중복 체크
for(int j=0; j<i; j++) {
if(lotto[i] == lotto[j]) {
i--;
break;
}
}
}
5줄마다 구분하기 (띄어쓰기)
if(count%5==0) System.out.println();
번호 6개를 출력하는 for문 진행한 횟수를 변수 count에 저장하고
그 값을 5로 나누었을 때 0이 된 줄에 띄어쓰기 추가하면 된다.
'Java' 카테고리의 다른 글
Java, Class의 정의(객체지향, seter/geter, Overload) (0) | 2024.07.12 |
---|---|
Java, 다차원 배열이란(2차원 배열, 가변길이, 고정길이, 동적 할당, 정적 할당) (0) | 2024.07.10 |
Java, 기본 Array(배열)과 Object(최상위 클래스) (1) | 2024.07.10 |
Java, Selection Sort (선택 정렬), Bubble Sort (거품 정렬) / 정렬 방식 (0) | 2024.07.09 |
Java, 배열 Max(최댓값), Min(최솟값) 구하기 (0) | 2024.07.09 |