난수를 생성해봅시다 😎
오늘은 자바에서 랜덤 숫자 만드는 법을 알아봅시다.
개념
자바에서 난수를 만드는 방법은 2가지가 있습니다.
- Random 클래스 사용
- Math.random()
차이점
1. Random 클래스는 int, long, float, double, boolean type의 난수를 얻을 수 있지만 Math.random()은 0.0에서 1사이의 난수를 얻습니다.
2. Random 클래스는 seed를 설정 할 수 있지만 Math.random()은 현재시간으로 seed가 고정되어있습니다.
- seed란 난수를 만드는 알고리즘에 사용되는 값으로 seed가 같으면 같은 난수를 생성합니다.
이제 사용하는 방법을 알아봅시다!
1. Random 클래스 사용
import java.util.Random;
이 문장을 import 해줍니다.
Random random = new Random();
random 객체를 생성해줍니다.
random.setSeed(System.currentTimeMillis());
만약 시드값 설정을 하고싶으면 시드값 설정을 해주어도됩니다.
random.nextInt(4); // 0 ~ 3 까지의 무작위 int 값 리턴
random.nextInt(10); // 0 ~ 9 까지의 무작위 int 값 리턴
random.nextInt(100); // 0 ~ 99 까지의 무작위 int 값 리턴
random.nextInt(4)+1; // 1 ~ 4 까지의 무작위 int 값 리턴
random.nextInt(4)+100; // 100 ~ 103 까지의 무작위 int 값 리턴
nextInt를 사용하면 무작위 int 값을 반환합니다.
nextInt(n)은 n미만의 랜던 정수를 리턴합니다.
만약 범위를 정해주고싶으면 뒤에 +를 사용하여 원하는 범위로 맞춰줍니다.
random.nextLong() // 무작위 long 값
random.nextFloat() //무작위 float 값
random.nextDouble() //무작위 double 값
random.nextBoolean() // 무작위 boolean 값
random.nextGaussian() //무작위 정규 분포의 난수 값
int, long, float, double, boolean type의 난수도 얻을 수 있습니다.
2. Math.random()
Math.random();
0.0 ~ 1.0 사이의 난수가 1개 발생합니다.
이것을 사용해서 특정 범위 안에 있는 난수를 만들 수 있습니다.
(int)(Math.random()*10); //0 ~ 10 사이
(int)(Math.random()*100); // 0 ~ 100 사이
(int)(Math.random()*10+10)); //10 ~ 20 사이
예제
1. 로또번호 1~45 중의 숫자중 랜덤하게 6개를 중복 없이 얻어내서 콘솔창에 출력
//랜덤한 숫자를 얻어낼 객체
Random ran=new Random();
//랜덤한 숫자를 저장할 객체
Set<Integer> lottoSet=new HashSet<>();
while(true) {
//1 ~ 45 사이의 랜덤한 숫자 얻어내기
int ranNum=ran.nextInt(45)+1;
//얻어낸 숫자를 Set 에 저장하기
lottoSet.add(ranNum);
//만일 lottoSet 의 size 가 6 이면 반복문 탈출
if(lottoSet.size() == 6) {
break;
}
}
Iterator<Integer> it=lottoSet.iterator();
while(it.hasNext()) {
int num=it.next();
System.out.print(num+" ");
}
2. 3개의 문자열이 같은 것이 나오게 하는 게임 만들기
/*
* 1. cherry, apple, banana, melon, 7
* 5개의 문자열 중에서 1개가 랜덤으로 출력되게 해보세요.
*
* 2. 5개의 문자열 중에서 3개가 한줄에 한번에 랜덤으로 출력되게 해보세요.
*
*/
String[] items= {"cherry","apple","banana","melon","7"};
Random random=new Random();
int[] nums=new int[3];
for(int i=0; i<nums.length; i++) {
nums[i]=random.nextInt(5);
}
String result = items[nums[0]]+"|"+items[nums[1]]+"|"+items[nums[2]];
System.out.println(result);
int[] point = {10,20,30,40,1000};
if(nums[0]==nums[1] && nums[0]==nums[2]) {
for(int n=0; n<point.length; n++) {
if(nums[0]==n) {
System.out.println(point[n]+"점 입니다.");
}
}
}else {
System.out.println("0점 입니다.");
}
'Languages > JAVA' 카테고리의 다른 글
[JAVA] 예외처리 (Exception) / try ~ catch ~ finally / 직접 예외 처리(throw , throws) (0) | 2021.11.10 |
---|---|
[JAVA] DTO vs VO vs Entity / DTO 살펴보기 (0) | 2021.11.10 |
[JAVA] 자바 자료형 알아보기 #6 - 배열을 이해해보자 / clone() / 확장 for 문 등 (0) | 2021.11.09 |
[JAVA] HashSet의 개념, 사용법, 예제 (0) | 2021.11.09 |
[JAVA] HashMap의 개념, 사용법, 예제 (0) | 2021.11.08 |