로또
1~45까지 6개의 숫자를 중복 없이 추첨한다.
오름차순 정렬
1, 13, 24, 33, 40, 45
// 배열 vs 컬렉션
// int -> Integer
// double -> Double
// String
ArrayList<Integer> arr = new ArrayList();
arr.add(1);
arr.add(2);
arr.add(3);
System.out.println(arr.get(0));
System.out.println(arr.get(1));
System.out.println(arr.get(2));
1. 하나하나 숫자 만들어서 배열에 넣어보기
package algo;
import java.util.ArrayList;
import java.util.Random;
public class Lotto01 {
public static void main(String[] args) {
// 준비
int num = 0;
int[] arr = new int[6];
// 1회전
num = 30;
arr[0] = num;
// 2회전
num = 13;
arr[1] = num;
// 3회전
num = 3;
arr[2] = num;
// 4회전
num = 35;
arr[2] = num;
// 5회전
num = 12;
arr[2] = num;
// 6회전
num = 5;
arr[2] = num;
for (int i = 0; i < 6; i++) {
System.out.print(arr[i] + ", ");
}
}
}

2. 랜덤숫자 생성 후 값이 중복 되면 넣지 않는다.
package algo;
import java.util.ArrayList;
import java.util.Random;
public class Lotto02 {
public static void main(String[] args) {
// 준비
int num = 0;
int[] arr = new int[6];
Random rand = new Random();
boolean isSameNum = false;
// 1회 추첨
// [10]
num = rand.nextInt(45) + 1;
arr[0] = num;
// 2회 추첨
// [10, 10] | [10, 13]
num = rand.nextInt(45) + 1;
if (arr[0] == num) {
isSameNum = true;
}
if (!isSameNum) {
arr[1] = num;
}
// 3회 추첨
// [10, 13, 10] | [10, 13, 14]
num = rand.nextInt(45) + 1;
if (arr[0] == num) {
isSameNum = true;
}
if (arr[1] == num) {
isSameNum = true;
}
if (!isSameNum) {
arr[2] = num;
}
// 4회 추첨
// [10, 13 ,14, 13] | [10, 13, 14, 24]
num = rand.nextInt(45) + 1;
if (arr[0] == num) {
isSameNum = true;
}
if (arr[1] == num) {
isSameNum = true;
}
if (arr[2] == num) {
isSameNum = true;
}
if (!isSameNum) {
arr[3] = num;
}
// 5회 추첨
// [10, 13 ,14, 24, 10] | [10, 13, 14, 24, 35]
num = rand.nextInt(45) + 1;
if (arr[0] == num) {
isSameNum = true;
}
if (arr[1] == num) {
isSameNum = true;
}
if (arr[2] == num) {
isSameNum = true;
}
if (arr[3] == num) {
isSameNum = true;
}
if (!isSameNum) {
arr[4] = num;
}
// 6회 추첨
// [10, 13 ,14, 24, 35, 24] | [10, 13, 14, 24, 35, 40]
num = rand.nextInt(45) + 1;
if (arr[0] == num) {
isSameNum = true;
}
if (arr[1] == num) {
isSameNum = true;
}
if (arr[2] == num) {
isSameNum = true;
}
if (arr[3] == num) {
isSameNum = true;
}
if (arr[4] == num) {
isSameNum = true;
}
if (!isSameNum) {
arr[5] = num;
}
for (int i = 0; i < 6; i++) {
System.out.print(arr[i] + ", ");
}
}
}

3. 공통모듈
package algo;
import java.util.Random;
public class Lotto03 {
public static void main(String[] args) {
// 준비
int num = 0;
int[] arr = new int[6];
Random rand = new Random();
boolean isSameNum = false;
// 1회 추첨
// [10]
num = rand.nextInt(45) + 1;
arr[0] = num;
//-------------------------------------------
int r = 1;
// 2회 추첨
// [10, 10] | [10, 13]
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
}
}
if (!isSameNum) {
arr[r] = num;
}
r++;
// 3회 추첨
// [10, 13, 10] | [10, 13, 14]
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
}
}
if (!isSameNum) {
arr[r] = num;
}
r++;
// 4회 추첨
// [10, 13 ,14, 13] | [10, 13, 14, 24]
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
}
}
if (!isSameNum) {
arr[r] = num;
}
r++;
// 5회 추첨
// [10, 13 ,14, 24, 10] | [10, 13, 14, 24, 35]
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
}
}
if (!isSameNum) {
arr[r] = num;
}
r++;
// 6회 추첨
// [10, 13 ,14, 24, 35, 24] | [10, 13, 14, 24, 35, 40]
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
}
}
if (!isSameNum) {
arr[r] = num;
}
r++;
for (int i = 0; i < 6; i++) {
System.out.print(arr[i] + ", ");
}
}
}



4. 0이 안 나오게 만들어 보자
1. 0이 나오는 이유는 랜덤으로 추첨 한 숫자가 중복된 숫자이기 때문이다.
// 2회 추첨
// [10, 10] | [10, 13]
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
}
}
if (!isSameNum) {
arr[r] = num;
}
if (isSameNum) {
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
}
}
if (!isSameNum) {
arr[r] = num;
}
}
중복된 숫자가 나오면 배열에 저장하지 않고 넘어가기 때문에 0이 나온다.
그래서 중복값이 나와버리면 다시 처음부터 다시 반복해야 한다.
중복값이 안 나올 때 까지 무한 반복을 할 수 있기 때문에 while문을 사용해 보겠다.
package algo;
import java.util.Random;
public class Lotto04 {
public static void main(String[] args) {
// 준비
int num = 0;
int[] arr = new int[6];
Random rand = new Random();
boolean isSameNum = false;
// 1회 추첨
// [10]
num = rand.nextInt(45) + 1;
arr[0] = num;
//-------------------------------------------
int r = 1;
// 2회 추첨
// [10, 10] | [10, 13]
while (true) {
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
}
}
if (!isSameNum) {
arr[r] = num;
break;
}
}
r++;
// 3회 추첨
// [10, 13, 10] | [10, 13, 14]
while (true) {
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
}
}
if (!isSameNum) {
arr[r] = num;
break;
}
}
r++;
// 4회 추첨
// [10, 13 ,14, 13] | [10, 13, 14, 24]
while (true) {
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
}
}
if (!isSameNum) {
arr[r] = num;
break;
}
}
r++;
// 5회 추첨
// [10, 13 ,14, 24, 10] | [10, 13, 14, 24, 35]
while (true) {
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
}
}
if (!isSameNum) {
arr[r] = num;
break;
}
}
r++;
// 6회 추첨
// [10, 13 ,14, 24, 35, 24] | [10, 13, 14, 24, 35, 40]
while (true) {
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
}
}
if (!isSameNum) {
arr[r] = num;
break;
}
}
r++;
for (int i = 0; i < 6; i++) {
System.out.print(arr[i] + ", ");
}
}
}



5. 반복문으로 5회를 돌려보자
package algo;
import java.util.Random;
public class Lotto05 {
public static void main(String[] args) {
// 준비
int num = 0;
int[] arr = new int[6];
Random rand = new Random();
boolean isSameNum = false;
// 1회 추첨
// [10]
num = rand.nextInt(45) + 1;
arr[0] = num;
//-------------------------------------------
int r = 1; // 현재 배열 인덱스 위치
// 2회 추첨
// [10, 10] | [10, 13]
// 3회 추첨
// [10, 13, 10] | [10, 13, 14]
// 4회 추첨
// [10, 13 ,14, 13] | [10, 13, 14, 24]
// 5회 추첨
// [10, 13 ,14, 24, 10] | [10, 13, 14, 24, 35]
// 6회 추첨
// [10, 13 ,14, 24, 35, 24] | [10, 13, 14, 24, 35, 40]
for (int j = 0; j < 5; j++) {
while (true) {
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
break; // 중복 찾으면 다음 위치 확인 x
}
}
if (!isSameNum) {
arr[r] = num;
break;
}
}
r++;
}
for (int i = 0; i < 6; i++) {
System.out.print(arr[i] + ", ");
}
}
}



반복문을 돌릴 때 가끔 출력이 되지 않고 계속 실행되는 상황이 나타났다.
6. 오름차순 정렬을 해보자
package algo;
import java.util.Random;
import static algo.Bubble.bubble;
public class Lotto06 {
public static void main(String[] args) {
// 준비
int num = 0;
int[] arr = new int[6];
Random rand = new Random();
boolean isSameNum = false;
// 1회 추첨
// [10]
num = rand.nextInt(45) + 1;
arr[0] = num;
//-------------------------------------------
int r = 1; // 현재 배열 인덱스 위치
// 2회 추첨
// [10, 10] | [10, 13]
// 3회 추첨
// [10, 13, 10] | [10, 13, 14]
// 4회 추첨
// [10, 13 ,14, 13] | [10, 13, 14, 24]
// 5회 추첨
// [10, 13 ,14, 24, 10] | [10, 13, 14, 24, 35]
// 6회 추첨
// [10, 13 ,14, 24, 35, 24] | [10, 13, 14, 24, 35, 40]
for (int j = 0; j < 5; j++) {
while (true) {
isSameNum = false; // 초기화 해주지 않으면 while문 무한 반복
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
break; // 중복 찾으면 다음 위치 확인 x
}
}
if (!isSameNum) {
arr[r] = num;
break;
}
}
r++;
}
int[] sortedArr = bubble(arr);
for (int i = 0; i < 6; i++) {
System.out.print(sortedArr[i] + ", ");
}
}
}



Share article