본문 바로가기

Job/Java

[Java] 로또 프로그램 난수 생성기 !! (중복체크)

java util 패키지를 이용해서 중복없는 로또 프로그램 만들기~!!

 

import java.util.*;
public class LottoNumber {
 public static void main(String[]args){
  int[] numbers = new int[6];
  Random gen = new Random();
 
  for(int i =0 ; i<6 ; i++  ){
   numbers[i] = gen.nextInt(45)+1; //난수생성

  for(int j = 0; j < i; j++){               //중복체크를 위해 for문 한번 더 돕니다. 대신 j 는 i 보다 작을동안..
   if(numbers[i] == numbers[j]){   //numbers[i] 번째에 생성된 난수와 그전에 생성된 numbers[j] 난수와 같은게 있나 비교합니다.
    i = i-1;                                  //같은게 있다면 i-1 해주어 현재 자리에 새로 난수를 발생 시키도록 합니다.
    break;                                  //같은수가 발견되었다면 현재 for 문을 나가고 위에 for 부터 다시 돕니다.
   }
  }
  }
         
  for(int a =0 ; a <6; a++){
   System.out.println("행운의숫자 : "+numbers[a]);
  }
 }
}

 

 

 

 

/*
헷갈리시다면 그림을 그려보세요

ex) 현재 numbers배열에
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;

까지 생성되어 있고

numbers[5] = 5;
마지막 자리에 5가 생성되었다고 가정하면
두번째 for을 돌때 같은값이 있으니까 if문에 걸리게 되죠

 
numbers[5] = 5   == numbers[0] = 1
numbers[5] = 5   == numbers[1] = 2
numbers[5] = 5   == numbers[2] = 3
numbers[5] = 5   == numbers[3] = 4
numbers[5] = 5   == numbers[4] = 5

 
이런식으로 비교를 하는데 numbers 배열 4번째 값과 5번째 값이
같으니 if문에 걸려 i-1 해주고 현재 for문을 나갑니다.그럼 i값이 5-1 이 되니
4가 되어 다시 돌때는 4부터 도는게 아니라 i++ 증감식 때문에 5가 되어
중복되었던 자리에 새로운 난수를 넣은후 중복되는 수가 없을때 까지 위에 과정을 반복 합니다.

 
잘 이해가 가지 않으신다면 System.out.println(); 으로 찍어서 디버깅 하세요 ^^
*/

'Job > Java' 카테고리의 다른 글

[Java] System 클래스 currentTimeMillis()  (0) 2009.09.04
[Java] System 클래스 GetEnv()  (0) 2009.09.04
[Java] System 클래스 getProperties()  (0) 2009.09.04
[Java] System 클래스 arraycopy()  (0) 2009.09.04
[Java] 구구단 for문 이용  (0) 2008.02.21