본문 바로가기
IT 정보

로또 프로그램 - Java

by aqua_ 2019. 11. 30.

시간날때 마다 조금씩 java 및 안드로이드 관련 언어들을 공부하고 있는데 그날 공부했던 내용들을 추려서 시간나는대로 끄적여볼까합니다.

 

이번 시간에는 Math.random() 메소드를 활용해 임의의 정수를 추출하는 로또 번호 생성기를 만들어보겠습니다.

 

Math.random() 메소드는 0.0과 1.0 사이의 double 타입의 난수를 랜덤으로 발생시킵니다.

public class random {

  public static void main(String[] args) {
      double num1 = (Math.random());
      double num2 = (Math.random());
      double num3 = (Math.random());
   System.out.println(num1 + " , " + num2 + " , " + num3);
   }
}



실행결과
0.9755491748790112 , 0.3929799352027691 , 0.87365772284815

이런식으로 double 타입의 난수라서 로또번호를 생성시킬 수가 없습니다.

 

이럴때는 난수를 정수타입으로 강제 변환해서 정수값을 얻을 수 있습니다. 

public class lotto { 

   public static void main(String[] args) { 
      int num1 = (int)(Math.random() * 45 + 1 );  // int 타입으로 강제 변환
      int num2 = (int)(Math.random() * 45 + 1 );  // 0은 제외해야되므로 +1해서 1~45까지 번호생성
      int num3 = (int)(Math.random() * 45 + 1 ); 
      int num4 = (int)(Math.random() * 45 + 1 ); 
      int num5 = (int)(Math.random() * 45 + 1 ); 
      int num6 = (int)(Math.random() * 45 + 1 ); 
   System.out.println(num1 + " , "+ num2 + " , "+ num3 + " , " + num4 + " , "+ num5 " , " + num6); 
    } 
}

Math.random() 메소드로 간단하게 만들 수 있지만 실행을 시켜 보면 중복된 번호가 종종 생성이 됩니다.

33 , 10 , 39 , 26 , 25 , 39

또한 중복도 중복이지만 같은 실행문을 반복적으로 사용하다보니 프로그램이 간결해 보이지 않습니다.

728x90

 

이를 해결하기 위해 배열과 for문을 이용해서 작성해보았습니다.

package array;
import java.util.Arrays;
  public class randomNumber {
   public static void main(String[] args) {
      int[] lotto = new int[6];  // 배열을 이용하여 6개의 값을 저장될 수 있는 공간을 만들어줍니다.
      for (int i=0; i<lotto.length; i++) {
      lotto[i] = (int)(Math.random() * 45) + 1;  // 6번 루프하면서 번호 생성
  
   
      for(int j=0; j<ij++) {
      if (lotto[i] == lotto[j])
      i-=1;   // 중복 숫자 확인 
        }
   }
      Arrays.sort(lotto); // 오름차순 정렬
      System.out.println(Arrays.toString(lotto));
     }

}

실행결과

[8, 23, 32, 36, 42, 43]

중복없이 오름차순으로 깔끔하게 결과가 나오네요.

 

이제 자바를 시작한 초보가 작성한거라 수정 보완해야될 부분들이 많지만 책만보고 넘어가기 보다는 이렇게 블로그에 포스팅을 하면서 끄적여 보니 조금이라도 더 공부하고 신경을 쓰게 되네요.

앞으로도 간단하면서도 재미있는 프로그램 위주로 포스팅을 해볼까합니다.

728x90

댓글