- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[JAVA] java에서 random숫자 생성하기(난수추출법) 본문
자바에서 Random값을 구하는 방법으로는 크게 다음 두가지가 있다.
1) java.lang.math.Random
2) java.util.Random
이때 첫번째 방법은 seed값을 변환할 수 없기 때문에 고르게 분포하지 않는다.
그래서 seed값을 변환해 고른 난수추출을 할 수 있는 방법이 필요한데 이때,
두번째 방법을 사용한다. 아래의 예제는 아주 간단히 정규분포(Normal / Gaussian)에서
난수를 추출하는 방법을 보여주고 있다.
---------------------------------------------------------------------------------------
import java.util.Random;
public class RandomNumber {
public static void main(String[] args) {
Random rand = new Random(System.currentTimeMillis()); // seed값을 배정하여 생성
System.out.println(Math.abs(rand.nextGaussian())); // 난수값 출력
}
}
----------------------------------------------------------------------------------------
아래의 예제는 다양한 범위에서 난수를 추출하는 방법을 보여주고 있다.
---------------------------------------------------------------------------------------
import java.util.Random;
public class RandomNumber {
public static void main(String[] args) {
Random rand = new Random(System.currentTimeMillis()); // seed값을 배정하여 생성
System.out.println(Math.abs(rand.nextInt(10))); //0~10사이의 난수값생성
System.out.println(Math.abs(rand.nextInt(9)+1)); //1~10사이의 난수값생성
System.out.println(Math.abs(rand.nextInt(990)+10)); //10-100사이의 난수값생성
}
}
----------------------------------------------------------------------------------------
nextInt([숫자])를 사용할경우 0~[숫자]까지의 범위에서 난수가 추출되므로 예로 0~9까지 난수를
추출한후 1을 더해주면 1~10까지의 난수가 추출됨.
** 참고사항 : 컴퓨터상에서 난수추출과 Seed값 배정법(출처 : 네이버 지식검색 자료모음)
컴퓨터는 생각을 할 수 없습니다. 그래서 무작위로 수를 뽑는 것 역시 불가능합니다.
단, 엄청나게 긴 수열을 만들어 내어서 "난수"로 보이는 숫자를 만들어 낼 수 있는데
그것이 유사 난수(Pseudo random)이라고 합니다.
단, 이 수열의 집합은 Seed라는 지정번호에 좌우되는데(Seed가 같을 경우, random을
해도 같은 수열만 나온단 말이 되겠죠) Seed의 숫자에 따라서 생성되는 수열이 달라집니다.
프로그래머들은 Seed 번호를 대개 현재의 시각에 대응시킵니다. 그래서 한번의 Random
호출시마다 다른 난수가 생성됩니다. 즉 명령을 실행하라고 인간이 엔터키나 클릭을 한
시점의 시간을 1000분의 1초를 단위로 추출해서 그 수를 기본으로 난수를 만들기 때문에
언제나 실행 할때마다 전혀 다른 난수가 나오게 되는것입니다.
최종적으로는, seed를 and or xor 등등을 여러번 섞고 왼쪽 오른쪽으로 돌렸다가 비트단위로
반정도로 잘라서 뒤섞고 하는방식으로 만듭니다.
'★─Programing > ☆─JAVA' 카테고리의 다른 글
[JAVA] 자바 프로그램의 구조, 주석, Data Type, 상수, 형변환, .. (0) | 2007.10.05 |
---|---|
[JAVA] 자바/JAVA 에러 모음 (0) | 2007.10.05 |
[JAVA] 자바 클래스의 종류 (0) | 2007.10.05 |
[JAVA] 자바 배열선언 (0) | 2007.10.01 |
[JAVA] 자바의 특징 (1) | 2007.08.06 |