로또 번호를 만들어주는 프로그램을 만드는 문제
(1~45까지의 중복없는 6개의 숫자를 배열로 만드는 문제)
[전체코드]
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scann = new Scanner(System.in);
int inputTax; // 입력 금액
int lottoCnt; // 구매 로또 개수
int change; // 잔돈
int[][] lottoNum;
System.out.println("로또 1000원에 한 장");
System.out.print("투입 금액 : ");
inputTax = scann.nextInt();
lottoCnt = inputTax / 1000;
change = inputTax % 1000;
lottoNum = new int[lottoCnt][6];
for (int i = 0; i < lottoCnt; i++) {
for (int j = 0; j < lottoNum[i].length; j++) {
lottoNum[i][j] = (int) (Math.random() * 45 + 1);
for (int k = 0; k < j; k++) { // 중복 검사
if (lottoNum[i][k] == lottoNum[i][j]) {
j--;
break;
}
}
}
}
for (int i = 0; i < lottoCnt; i++) {
for (int j = 0; j < lottoNum[i].length; j++) {
System.out.print(lottoNum[i][j] + " ");
}
System.out.println();
}
if (change > 0) {
System.out.println();
System.out.println("잔돈 : " + change + "원");
}
}
이 문제는 6개의 숫자를 입력하되 6개의 숫자가 중복되지 않아야 하는 점이 중점적으로 보면 됩니다.
그리고 로또를 한 개만 만드는 것이 아닌 입력된 금액에 따라서 개수가 증가하기 때문에 그만큼의 반복적인 작업이 필요합니다.
입력부
Scanner scann = new Scanner(System.in);
int inputTax; // 입력 금액
int lottoCnt; // 구매 로또 개수
int change; // 잔돈
int[][] lottoNum;
입력을 위한 Scanner와 입력 금액을 받기 위한 정수형 변수 하나가 필요하고 금액에 따른 로또의 개수와 잔돈을 표시하기 위한 변수와 뽑아낸 번호를 넣어줄 2차원 배열 하나가 필요합니다.
처리부
System.out.println("로또 1000원에 한 장");
System.out.print("투입 금액 : ");
inputTax = scann.nextInt();
lottoCnt = inputTax / 1000;
change = inputTax % 1000;
lottoNum = new int[lottoCnt][6];
for (int i = 0; i < lottoCnt; i++) {
for (int j = 0; j < lottoNum[i].length; j++) {
lottoNum[i][j] = (int) (Math.random() * 45 + 1);
for (int k = 0; k < j; k++) { // 중복 검사
if (lottoNum[i][k] == lottoNum[i][j]) {
j--;
break;
}
}
}
}
입력받은 값에 1000을 나누어 이를 이용해 2차원배열의 크기를 결정하고, 나머지 연산으로 잔액을 계산합니다.
그 후 배열에 번호를 랜덤으로 입력하는데, 이때 중복 검사를 하게 되는데 배열의 첫자리부터 현재위치 직전까지 비교하여 중복이 나올 경우 인덱스 값을 줄여 랜덤값을 재할당 시켜 중복된 값이 나오지 않게 합니다.
출력부
for (int i = 0; i < lottoCnt; i++) {
for (int j = 0; j < lottoNum[i].length; j++) {
System.out.print(lottoNum[i][j] + " ");
}
System.out.println();
}
if (change > 0) {
System.out.println();
System.out.println("잔돈 : " + change + "원");
}
2차원 배열의 주소를 하나씩 호출하여 로또의 번호를 출력하고, 나머지연산의 결괏값이 0보다 클 경우 잔액이 있다는 뜻이므로 추가로 잔액을 출력해 줍니다.
실행 결과
