JAVA :: Test146_자바에서 기본적으로 제공하는 주요 클래스들(Random 클래스_로또 번호 생성 프로그램)

2023. 9. 23. 23:59· 📚 Study/Java

○ 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();
}
}
}

 

저작자표시 (새창열림)
'📚 Study/Java' 카테고리의 다른 글
  • JAVA :: Test152~153_예외 다시 던지기
  • JAVA :: Test147~151_예외 처리 (Exception Handling)
  • JAVA :: Test145_
  • JAVA :: Test144_자바에서 기본적으로 제공하는 주요 클래스들(Calendar 클래스_입력 받는 날짜만큼 후의 연,월,일,요일 출력하는 프로그램 구현)
bono-hye
bono-hye
bono-hye
공부를 합시다👩🏻‍💻
bono-hye
전체
오늘
어제
  • 분류 전체보기 (506)
    • 📚 Study (225)
      • Java (148)
      • Oracle (28)
      • JDBC (4)
      • Javascript (9)
      • JSP & Servlet (19)
      • JQuery (6)
      • Spring (9)
      • Springboot (0)
      • 개인 공부 (2)
    • ✏️ 문제풀이 (280)
      • 백준 (181)
      • 프로그래머스 (99)

블로그 메뉴

  • 홈
  • 글쓰기
  • 관리
hELLO · Designed By 정상우.v4.2.1
bono-hye
JAVA :: Test146_자바에서 기본적으로 제공하는 주요 클래스들(Random 클래스_로또 번호 생성 프로그램)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.