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