h-i-s-t-o-r-y

[Java] 랜덤 로또 번호 발생기 본문

Java

[Java] 랜덤 로또 번호 발생기

H' 2021. 7. 16. 11:27
package days08;

/**
 * @author Hini
 * @date 2021. 3. 17 - 오후 4:17:52
 * @subject	향상된 for문 p.166 (foreach문)   확장for문
 * @content	JDK 1.5 이후~ 배열 또는 컬렉션에 저장된 요소의 값을 접근해서 사용할 때 ... 편리..
 *
 */
public class Ex07 {

	public static void main(String[] args) {
		
		int [] m = new int[10];
		
		fillM(m);		//난수를 발생시켜서 배열 각 요소에 채워넣는 함수
		
		outputM(m);		//출력함수
		
		
		//foreach
		/*
		for (int i : 배열명 또는 컬렉션명) {
			//요소의 값에 접근해서 사용  (저장하는게 아님)
		}
		*/
		
		
	}//main

	private static void outputM(int[] m) {
		/*
		for (int i = 0; i < m.length; i++) {
			System.out.printf("[%d]", m[i]);
		}
		System.out.println();
		*/
		
		//foreach
		for (int i : m) {
			System.out.printf("[%d]", i);
		}
		System.out.println();
		
	}//outputM

	private static void fillM(int[] m) {
		for (int i = 0; i < m.length; i++) {
			m[i] = (int) (Math.random()*101);		//0<= m[i] <=100
		}
	}//fillM

}//class
package days09;

public class Ex02 {

	public static void main(String[] args) {
		// 로또 번호 발생 -> 배열 추가 -> 출력
		
		int [] lotto = new int [6];
		
		fillLotto(lotto);
		
		printLotto(lotto);
		
		
		
	}//main


//	private static void fillLotto(int[] lotto) {
//		for (int i = 0; i < lotto.length; i++) {
//			lotto[i] = (int)(Math.random()*45) +1;
//		}//for
//	}//fill
	
	
	
	
	
	//내가푼거...
	// [0][0][0][0][0][0]
	/*
	private static void fillLotto(int[] lotto) {
		// while 6개를 모두 채워넣을 때까지 반복
		int idx = -1, lastIdx = -1;
		int len = lotto.length;
		
		while ( ! (idx==len-1 && lastIdx==len-1) || ( idx==-1 && lastIdx==-1) ) {
			int num = (int)(Math.random()*45)+1;
			for (int i = 0; i < len; i++) {
				if(lotto[i]==num) idx = i;
			}
			for (int i = len-1; i >= 0; i--) {
				if(lotto[i]==num) lastIdx = i;
			}
			if ((idx == lastIdx) && idx != -1) lotto[idx]=num;
		}
	}//fill
	*/
	
	
	
	
	
	//풀이
	// [0][0][0][0][0][0]
	
	private static void fillLotto(int[] lotto) {
		// while 6개를 모두 채워넣을 때까지 반복
		int num = (int)(Math.random()*45)+1;
		lotto[0] = num;

		int idx = 1;		//2,3,4,5
		
		boolean flag = false;		//중복되지 않는다
		
		while ( idx <= 5 ) {
			flag = false;				//초기화 **
			num = (int)(Math.random()*45)+1;
			System.out.println(num);
			
			// 로또번호 중복체크
			for (int i = 0; i < idx; i++) {
				if (num==lotto[i]) {
					flag=true;
					break;
				}
			}
			
			if(!flag) {
				lotto[idx]=num;
				idx++;
			}//if
			
		}//while
		
	}//fill
	
	
	
	
	
	
	private static void printLotto(int[] lotto) {
		for (int i = 0; i < lotto.length; i++) {
			System.out.printf("[%02d]", lotto[i]);
		}//for
		System.out.println();
	}//print

}//class
package days09;

public class Ex02_03 {

	public static void main(String[] args) {

		int [] lotto = new int [6];

		fillLotto(lotto);

		printLotto(lotto);

	}//main

	private static void fillLotto(int[] lotto) {
		int n, idx = 0;
		while (idx<=5) {
			n = (int) (Math.random()*45) +1;
			// 중복체크함수
			if (! isDuplicateLottoCheck(lotto, idx,n)) {
				lotto[idx]=n;
				idx++;
			}
		}//while
	}

	private static void printLotto(int[] lotto) {
		for (int i = 0; i < lotto.length; i++) {
			System.out.printf("[%02d]", lotto[i]);
		}//for
		System.out.println();
	}

	private static boolean isDuplicateLottoCheck(int[] lotto, int idx, int n) {
		for (int i = 0; i <idx; i++) {
			if(lotto[i] == n) return true;
		}
		return false;
	}




}//class

 

> 원하는 게임횟수 입력하여 로또 번호 출력

package days13;

import java.util.Scanner;

public class Ex07_02 {

	public static void main(String[] args) {
		// 로또
		// 게임횟수 * 6
		// [게임횟수][6]
		// [문제] 게임횟수를 입력받아서
		//			3
		//	[][][][][][]
		//	[][][][][][]
		//	[][][][][][]
		
		Scanner scanner = new Scanner(System.in);
		int gameNumber = 1;
		System.out.print("> 게임횟수 입력 ? ");
		gameNumber = scanner.nextInt();
		
		int [][] lottos = new int [gameNumber][6];
		
		// ***배열의 배열
		for (int i = 0; i < lottos.length; i++) {
			fillLotto(lottos[i]);
		}

		for (int j = 0; j < lottos.length; j++) {			
			printLotto(lottos[j]);
		}

		
	}//main
	

	private static void fillLotto(int[] lotto) {
		int n, idx = 0;
		while (idx<=5) {
			n = (int) (Math.random()*45) +1;
			// 중복체크함수
			if (! isDuplicateLottoCheck(lotto, idx,n)) {
				lotto[idx]=n;
				idx++;
			}
		}//while
	}

	private static void printLotto(int[] lotto) {
		for (int i = 0; i < lotto.length; i++) {
			System.out.printf("[%02d]", lotto[i]);
		}//for
		System.out.println();
	}

	private static boolean isDuplicateLottoCheck(int[] lotto, int idx, int n) {
		for (int i = 0; i <idx; i++) {
			if(lotto[i] == n) return true;
		}
		return false;
	}


}//class
Comments