본문 바로가기

개발자노트

함수) 모듈화,랜덤,배열,반복문 종합 예제) 로또

package test;

import java.util.Random;
import java.util.Scanner;

public class Test02 {
   
   static void f1(int[] data) { // 아래 메인에서 f2(num)으로 먼저 랜덤 배율을 만들어줬으니 그것을 출력하기 위한 함수
      for(int i=0;i<data.length;i++) { // 배열을 0번 인덱스부터 데이터길이만큼 차례대로 부르기 위함
         System.out.print(data[i]+" ");
      }
      System.out.println();
   }
   
   static int[] f2(int num) { // 어떠한 수를 메인에서 받아서 그 값만큼
      Random rand=new Random(); // random수를 생성하는 객체
      
      int[] data=new int[num]; // 받은 값만큼 배열의 길이 설정
      int i=0;
      while(i<data.length) { // 중복됐을 때 다시 실행을 하기 위한 while, 언제 중복이 되지 않을지를 모르니깐 while 사용
         int randNum=rand.nextInt(50)+1; // 랜덤할 수를 받을건데, 배열은 0부터 시작하기 떄문에 +1
         
         boolean flag=false;  // T:중복 발생 F:중복없음(통과)       
         for(int j=0;j<i;j++) { 
            if(randNum==data[j]) {  // 만약이 중복된다면! 
               flag=true; // 플래그를 true로 바꾼다
               break;
            }
         }
         if(flag) {  // -> 값이 중복되면
            continue; // ->아래 i++을 수행하지 못하고 다시 위로
         }
         data[i]=randNum; // -> i위치의 배열에 수를 담고         
         i++; // -> 그 다음칸에 입력하기 위해 i++
      }      
      
      return data;
   }

   public static void main(String[] args) {
	      Scanner sc=new Scanner(System.in);

	      int num; // 유효범위(scope)
	      while(true) {
	         System.out.print("정수입력: ");
	         num=sc.nextInt();
	         if(1<=num && num<=50) {
	            break;
	         }
	         System.out.println("1이상 50이하만 입력하세요!");
	      }

	      int[] lotto=f2(num);
	      f1(lotto);
	   }

	}