자바 로또 정렬 - jaba lotto jeonglyeol

public void practice14() { /* 로또 번호 자동 생성기 프로그램을 작성하는데 중복 값 없이 오름차순으로 정렬하여 출력하세요. ex. 3 4 15 17 28 40 */ // 1. 크기가 6인 정수형 배열 선언 및 할당 int[] lotto = new int[6]; // 2. 배열에 중복값없이 1부터 45사이의 난수 초기화 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; } } } // 3. 오름차순 정렬 for(int i=0; i<lotto.length; i++) { // 비교 주체 for(int j=i+1; j<lotto.length; j++) { // 비교 대상 if(lotto[i] > lotto[j]) { // 비교 주체가 비교 대상보다 큰 경우 값을 바꿔줘야됨 int temp = lotto[i]; lotto[i] = lotto[j]; lotto[j] = temp; } } } // 4. 출력 for(int i=0; i<lotto.length; i++) { System.out.print(lotto[i] + " "); } }

개발/JAVA

[JAVA]자바 Random 클래스를 활용한 로또 프로그램(중복제거, 순서정렬)

윤_ve 2021. 3. 5. 21:19

오늘 만들어 본것은 Random클래스를 활용한 로또 프로그램이다.

Random을 배우면 무조건 필수적으로 한번쯤은 만들어보는 그런 거랄까..?

사실 대한민국 국민이라면 Random함수를 처음 배울 때 누구나 로또를 가장먼저 떠올릴것이다. 

나도 오늘 배우자마자 로또 프로그램이나 만들어보자고 생각해서 바로 만들어 보았다.

생각보다 간단하고 쉽다. 조금만 배운사람이면 누구나 만들 수 있으니 다들 한번쯤 만들어 보길 바란다.

그전에 Random에 대해 알고 넘어 가보자.

Random 클래스가 무엇이냐 하면 java.util 패키지중 하나인 Random은 난수발생기이다. 

일정 범위가 주어지면 그 사이의 수 중 하나를 임의로 선택하게 된다.

걔 중에 가장 많이 쓴다고 하면 역시 nextInt()메서드가 아닐까 싶다.

Scanner를 사용하면 자주 쓰게 되는 int값을 입력 받는건데 랜덤에서도 int값을 랜덤으로 지정하게 하는것이다.

범위를 따로 지정해주지 않으면 int의 광범위한 정수 범위 중 하나의 숫자를 골라주니 보통은 범위를 넣게 된다.

사용방법은 간단하다.

객체.nextInt()를 사용하면 되는데 뒤의 소괄호 사이에 값을 넣어 주게 되면 0 ~ (입력값 - 1)만큼의 숫자 사이에서 임의의 정수 하나를 추출하게 된다.

-1이 되는 이유는 우리가 너무도 잘 아는 컴퓨터의 숫자는 0에서 시작하기 때문이라서! 인데 무슨 말이냐면

예를 들어 입력한 숫자가 10이라고 치면 "10까지의 수 중에 하나를 골라줘!!" 가 아니라, "0부터 10개의 정수 중 하나를 골라줘!!"가 되기때문에 0 ~ 9까지의 숫자중 하나를 부탁하게 되는 것이다. 그래서 0 ~ (입력값 -1)의 범위의 정수 하나를 출력하게 되는 것이다.

그러면 로또 프로그램을 통해 Random을 사용해보자. 막상 보면 엄청 간단하다.

우선 로또 클래스를 만들고 랜덤 클래스를 객체로 생성한다.

로또는 번호가 6개 이므로 배열의 크기가 6인 정수 배열을 하나 만들어 준다.

temp는 나중에 내림차순 정렬을 위해 필요한 변수이니 하나 만들어 둔다!

그 다음 반복문 for문을 돌려서 numArray 배열에 랜덤한 숫자를 넣어준다.

위에도 설명했지만 로또는 1 ~ 45까지의 숫자 중 랜덤한 6개 숫자이므로

'+1'절대 빼먹으면 안된다. 저게 없으면 0 ~ 44까지 중 숫자를 골라준다.

그리고 이중 for문으로 앞의 수와 뒤의 수가 같은 수이면 횟수를 한번 줄이고 다시 추출하게 하는 

중복제거또한 꼭 해줘야하는 로직이다.

다음으로는 위에 변수로 만들어 뒀던 temp를 쓸 차례이다.

앞의 입력한 수가 뒤에 입력한 수보다 더 클 경우 temp를 사용하여 한바퀴 돌려 서로의 위치를 바꿔준다. 이런 행동이 반복되면서 숫자는 자연스럽게 내림차순 정렬이 되고 이는 우리가 아는 로또와 같은 6자리의 숫자로 출력이 된다.

Arrays.toString을 이용하면 배열을 반복문 없이 콘솔에 출력할 수 있다.

(이중반복문은 Arrays.deepToString을 사용한다.)

한번 눌러보니 위의 숫자가 나왔는데 이걸로 이젠 매주 로또를 구매해야겠다고 생각했지만,

역시 자동만큼 편한건 없는 것 같다!ㅋㅋ 간단한 만큼 다들 한번씩 구현 해보자!!

girin code 2020. 2. 2. 14:40

[문제]

 로또번호 생성기 프로그램

public void lotto() {

int lotto [] = new int [6];//길이 6인 배열생성[0,1,2,3,4,5]

while(true) {

for(int i=0; i<lotto.length; i++) {//6개의 난수를 발생시킴

int random = (int)(Math.random()*45+1);

lotto[i]=random;

}

int temp=0;//내림차순으로 정렬 시키기

while(!(lotto[0]>=lotto[1]&&lotto[1]>=lotto[2]&&lotto[2]>=lotto[3]&&lotto[3]>=lotto[4]&&lotto[4]>=lotto[5])){

for(int i =0; i<lotto.length-1; i++) {

if(lotto[i]>=lotto[i+1]) {//앞에수가 커야하니까 앞에 수가 크거나 같으면 다음수를 뽑기

}else {//앞에수가 작았을 때 뒤에수랑 바꾸는 코드

temp=lotto[i];//둘중에 아무거나 temp에 넣고

lotto[i]=lotto[i+1];//lotto[i]값은 temp에 복사를해놨으니까 덮어씌워도된다!

lotto[i+1]=temp;

}

}

}

//중복값이 있을 경우, 다시 처음부터 실행

if(lotto[0]==lotto[1]|lotto[1]==lotto[2]|lotto[2]==lotto[3]|lotto[3]==lotto[4]|lotto[4]==lotto[5]) {

System.out.print("다시");

}else {

break;

}

}

//결과값 출력

for(int i=0; i<lotto.length; i++) {

System.out.print(lotto[i]);

if(i<lotto.length-1) {

System.out.print(", ");

}

}

}

Toplist

최신 우편물

태그