📚 Study/Java
JAVA :: Test146_자바에서 기본적으로 제공하는 주요 클래스들(Random 클래스_로또 번호 생성 프로그램)
bono-hye
2023. 9. 23. 23:59
○ java.util.Random 클래스
- 여러 형태의 난수를 발생시켜 제공하는 클래스
- Math 클래스의 정적 메소드인 random() 메소드도 난수를 제공하는 메소드이지만 0.0 ~ 1.0 사이의 실수 형태만 발생하게 되므로 필요한 형태의 난수를 만들어내기 위해서는 추가적인 연산을 여러 형태로 수행해야 한다.
- 그래서 자바는 여러 형태의 난수를 발생시켜주는 전용 클래스인 Random 클래스를 별도로 제공하고 있다.
○ 실습
로또 번호 생성 (난수 발생 프로그램)
프로그램이 실행되면...
기본적으로 로또 5게임을 수행하는 프로그램을 구현한다.
실행 예)
3 12 15 24 31 41
1 12 18 36 41 52
4 9 12 13 22 30
5 10 13 14 22 40
22 31 36 40 43 44
계속하려면 아무 키나 누르세요...
▼ 내가 작성한 코드
import java.util.Random;
class Lotto
{
// 배열 변수 선언 및 메모리 할당 → 로또 번호를 담아둘 배열방 6칸
private int[] num;
// 생성자
Lotto()
{
num = new int[6];
}
public int[] getNum()
{
sorting(); // 여기서 정렬 메소드를 불러줘야 num 값이 반환될 때, 정렬되어 반환
return num;
}
// 6개의 난수를 발생시키는 메소드 정의
public void start()
{
Random rd = new Random();
for (int i = 0; i<6; i++)
{
num[i] = rd.nextInt(45)+1;
for (int j=i+1 ; j<5; j++)
{
if (num[i] == num[j]) // 로또는 중복된 값이 나오지 않기 때문에.. i값과 j값이 같을 경우 다시 앞으로 돌아가서 난수 출력 수행.
{
i--;
}
}
}
}
// 정렬 메소드 정의
private void sorting()
{
for (int i=0; i<num.length-1; i++)
{
for (int j=i+1; j<num.length; j++)
{
if (num[i] > num[j])
{
num[i] = num[i]^num[j];
num[j] = num[j]^num[i];
num[i] = num[i]^num[j];
}
}
}
}
}
public class Test146
{
public static void main(String[] args)
{
// Lotto 클래스 기반 인스턴스 생성
Lotto lotto = new Lotto();
// 기본 5 게임
for (int i=1; i<6; i++)
{
// 로또 1게임 수행
lotto.start();
int[] rdArr = lotto.getNum();
System.out.println();
// 결과 출력
for (int j=0; j<6; j++)
System.out.printf("%3d", rdArr[j]);
}
}
}
▼ 같이 작성한 코드
import java.util.Random;
import java.util.Arrays;
class Lotto
{
// 배열 변수 선언 및 메모리 할당 → 로또 번호를 담아 둘 배열방 6칸
private int[] num;
// 생성자
Lotto()
{
num = new int[6];
}
public int[] getNum()
{
return num;
}
// 6개의 난수를 발생시키는 메소드 정의
public void start()
{
// Random 인스턴스 생성
Random rd = new Random();
int n;
int cnt = 0;
jump: // 여기로 빠져나간다. 세미콜론 아닌 콜론 사용! 빈번한 사용은 비추
while (cnt<6) // cnt = 0 1 2 3 4 5
{
n = rd.nextInt(45) +1; // 0 ~ 44 → 1 ~ 45
for (int i=0 ; i<cnt; i++)
{
// num[i] 요소와 n을 비교
if (num[i] == n)
continue jump; // 여기에서 ↑ 코드 설명 : 중복된 값이 생겼어 그럼 jump해서 위로 빠져나가서 다시 비교해보자~
}
num[cnt++] = n;
}
// 정렬 메소드 호출
sorting();
}
// 정렬 메소드 정의
private void sorting()
{
Arrays.sort(num);
}
}
public class Test146
{
public static void main(String[] args)
{
// Lotto 클래스 기반 인스턴스 생성
Lotto lotto = new Lotto();
// 기본 5게임
for (int i=1; i<=5; i++)
{
// 로또 1게임 수행
lotto.start();
// 결과 출력
for (int n : lotto.getNum())
{
System.out.printf("%3d", n);
}
System.out.println();
}
}
}