1. 자바 랜덤 숫자를 생성하는 방법
Java에는 랜덤 숫자의 세 가지 일반적인 개념이 있습니다.
1. System.CurrentTimeMillis ()를 사용하여 현재 시간에 긴 유형 수의 밀리 초를 얻으십시오.
2. Math.random ()에서 0에서 1 사이의 이중 값을 반환합니다.
3. 임의의 클래스를 통해 임의의 숫자를 생성하십시오. 이것은 강력한 기능을 가진 전문적인 랜덤 도구 클래스입니다.
2. 랜덤 API 설명
1. Java API 설명
랜덤 클래스의 인스턴스는 의사 랜덤 번호 스트림을 생성하는 데 사용됩니다. 이 클래스는 48 비트 씨앗을 사용하여 선형 합동 공식을 사용하여 수정합니다 (Donald Knuth의 The Art of Computer Programming, Volume 2, 3.2.1 참조).
동일한 시드로 두 개의 임의 인스턴스가 생성되면 각 인스턴스에 동일한 메소드 호출 시퀀스가 이루어지며 동일한 숫자를 생성하고 반환합니다. 속성의 구현을 보장하기 위해 클래스 랜덤에 특정 알고리즘이 지정됩니다.
많은 응용 프로그램에서 수학 클래스의 임의 메소드를 사용하기가 더 쉽습니다.
2. 방법 요약
무작위의()
새 랜덤 숫자 생성기를 만듭니다.
무작위 (긴 씨앗)
단일 긴 시드를 사용하여 새 임의의 숫자 생성기를 만듭니다.
public random (long seed) {setseed (seed)} 다음 메소드는 임의 번호 생성기의 상태를 저장합니다.
보호 된 int 다음 (INT 비트)
다음 의사 랜덤 번호를 생성하십시오.
부울 Nextboolean ()
이 랜덤 숫자 생성기의 시퀀스에서 가져온 균일하게 분산 된 부울 값 인 다음 의사 랜덤 번호를 반환합니다.
void nextbytes (byte [] bytes)
임의 바이트를 생성하여 사용자가 공급하는 바이트 배열에 배치하십시오.
Double NextDouble ()
이 난수 생성기의 시퀀스에서 가져온 0.0에서 1.0 사이의 이중 값 인 다음 의사 랜덤 번호를 반환합니다.
float nextfloat ()
이 난수 생성기의 시퀀스에서 가져온 0.0에서 1.0 사이의 플로트 값 인 다음 의사-랜덤 번호를 반환합니다.
더블 Nextgaussian ()
이 랜덤 숫자 생성기의 시퀀스에서 가져온 가우스 ( "정상적으로") 분포 인 다음 의사 랜덤 번호를 반환합니다. 평균 0.0, 표준 편차는 1.0입니다.
int nextint ()
이 임의의 숫자 생성기 순서에서 균일하게 분산 된 int 값인 다음 의사 랜덤 번호를 반환합니다.
int nextint (int n)
이 난수 생성기의 시퀀스에서 가져온 0 (포함)과 지정된 값 (제외) 사이에 균일하게 분포 된 int 값 인 의사 랜덤 번호를 반환합니다.
Long Nextlong ()
이 난수 생성기의 시퀀스에서 가져온 균일하게 분포 된 긴 값인 다음 의사 랜덤 번호를 반환합니다.
void setseed (긴 씨앗)
단일 긴 씨앗을 사용 하여이 임의의 숫자 생성기의 씨앗을 설정하십시오.
3. 임의의 클래스 사용 지침
1. 씨앗을 운반하는 것과 씨앗을 운반하지 않는 것의 차이
임의의 클래스의 근본적인 사용은 무작위의 인스턴스를 씨앗과 씨앗없이 나누는 것입니다.
평신도의 용어로는이 둘의 차이점은 다음과 같습니다.
씨앗의 경우 각 실행에 의해 생성 된 결과는 동일합니다.
씨앗이없는 경우, 생성하는 것은 달릴 때마다 무작위이며 전혀 패턴이 없습니다.
2. 씨앗이없는 임의의 물체를 만듭니다
랜덤 random = new random ();
3. 씨앗이없는 임의의 물체를 만듭니다
두 가지 방법이 있습니다.
1) 랜덤 랜덤 = 새로운 랜덤 (555L);
2) 랜덤 랜덤 = 새로운 랜덤 ();
random.setseed (555L);
4. 포괄적 인 응용 프로그램
다음은 사용법을 보여주기 위해 최근에 쓰여진 임의 번호 도구 클래스입니다.
코드 사본은 다음과 같습니다.
java.util.random import;
/**
* 임의 번호, 문자열 도구
* 사용자 : Leizhimin
* 날짜 : 2008-11-19 9:43:09
*/
공개 클래스 랜덤 루틸 {
공개 정적 최종 문자열 allchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";
공개 정적 최종 문자열 Letterchar = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
공개 정적 최종 문자열 번호 차르 = "0123456789";
/**
* 고정 길이 임의 문자열을 반환합니다 (상단 및 소문자 및 숫자 만 포함)
*
* @param 길이 임의 문자열 길이
* @return Random String
*/
공개 정적 문자열 생성 (int 길이) {
StringBuffer sb = new StringBuffer ();
랜덤 random = new random ();
for (int i = 0; i <길이; i ++) {
sb.append (allchar.charat (random.nextint (allchar.length ()));
}
반환 sb.toString ();
}
/**
* 고정 길이의 랜덤 순수 문자 문자리를 반환합니다 (상단 및 소문자 만 포함)
*
* @param 길이 임의 문자열 길이
* @return Random String
*/
public static string generatemixstring (int length) {
StringBuffer sb = new StringBuffer ();
랜덤 random = new random ();
for (int i = 0; i <길이; i ++) {
sb.append (allchar.charat (random.nextInt (letrchchar.length ()));
}
반환 sb.toString ();
}
/**
* 고정 길이의 랜덤 퓨어 캐롤 레터 문자리를 반환합니다 (대문자 만 포함)
*
* @param 길이 임의 문자열 길이
* @return Random String
*/
공개 정적 문자열 generatelowerstring (int length) {
return generatemixstring (length) .tolowercase ();
}
/**
* 고정 길이 무작위 순수 소문자 문자리를 반환합니다 (대문자 및 소문자 포함)
*
* @param 길이 임의 문자열 길이
* @return Random String
*/
공개 정적 문자열 generateupperstring (int length) {
return generatemixstring (length) .toupperCase ();
}
/**
* 고정 길이 순수 0 문자열을 생성합니다
*
* @param 길이 문자열 길이
* @return pure 0 문자열
*/
공개 정적 문자열 GenerateZeroString (int length) {
StringBuffer sb = new StringBuffer ();
for (int i = 0; i <길이; i ++) {
sb.append ( '0');
}
반환 sb.toString ();
}
/**
* 숫자에 따라 고정 길이 문자열을 생성하면 길이가 이전의 길이에 추가되기에 충분하지 않습니다.
*
* @param num 번호
* @param fixlenth String 길이
* @return 고정 길이 문자열
*/
public static String tofixdlengthstring (long num, int fixlenth) {
StringBuffer sb = new StringBuffer ();
문자열 strnum = string.valueof (num);
if (fixlenth -strnum.length ()> = 0) {
sb.append (GenerateZeroString (FixLenth -Strnum.length ()));
} 또 다른 {
새로운 runtimeexception ( " + fixlenth +"예외가있는 길이가있는 문자열로 "숫자" + num + "를 던지십시오.");
}
sb.append (strnum);
반환 sb.toString ();
}
/**
* 숫자에 따라 고정 길이 문자열을 생성하면 길이가 이전의 길이에 추가되기에 충분하지 않습니다.
*
* @param num 번호
* @param fixlenth String 길이
* @return 고정 길이 문자열
*/
public static String tofixdlengthstring (int num, int fixlenth) {
StringBuffer sb = new StringBuffer ();
문자열 strnum = string.valueof (num);
if (fixlenth -strnum.length ()> = 0) {
sb.append (GenerateZeroString (FixLenth -Strnum.length ()));
} 또 다른 {
새로운 runtimeexception ( " + fixlenth +"예외가있는 길이가있는 문자열로 "숫자" + num + "를 던지십시오.");
}
sb.append (strnum);
반환 sb.toString ();
}
public static void main (String [] args) {
System.out.println (Generatestring (15));
System.out.println (GeneratemixString (15));
System.out.println (Generatelowerstring (15));
System.out.println (GenerateUpperstring (15));
System.out.println (GenerateZeroString (15));
System.out.println (tofixdlengthstring (123, 15));
System.out.println (tofixdlengthstring (123l, 15));
}
}
실행 결과 :
vwmbpinbzfgcph
23Hyrahdjkkpwmv
tigowetbwkm1nde
BPZ1KNEJPHB115N
000000000000000000
00000000000000123
00000000000000123
Exit 코드 0으로 프로세스가 완료되었습니다
6. 요약
1. 랜덤 숫자는 일반적으로 사용됩니다.
2. 임의의 클래스 객체는 씨앗이 동일하다면 씨앗을 운반하는 한 차이가 있습니다.
3. 동일한 효과로 임의의 숫자를 가진 종자 객체를 만드는 두 가지 방법이 있습니다. 그러나 씨앗이있는 임의의 숫자는 많이 사용되지 않는 것 같습니다.
4. Random의 함수는 Math.random ()의 기능을 다룹니다.
5. 임의의 숫자를 사용하여 임의의 문자열과 같은 복잡한 랜덤 데이터를 구현할 수 있습니다.
6. 반복되지 않는 임의의 숫자를 공부하지 마십시오. 그다지 의미가 없습니다.
보충 코드 :
코드 사본은 다음과 같습니다.
패키지 com.test;
java.util.random import;
공개 클래스 랜덤 루틸 {
공개 정적 최종 문자열 allchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";
공개 정적 최종 문자열 Letterchar = "abcdefghijkllmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
공개 정적 최종 문자열 번호 차르 = "0123456789";
/**
* 고정 길이 임의 문자열을 반환합니다 (상단 및 소문자 및 숫자 만 포함)
* @param 길이 임의 문자열 길이
* @return Random String
*/
공개 정적 문자열 생성 (int 길이)
{
StringBuffer sb = new StringBuffer ();
랜덤 random = new random ();
for (int i = 0; i <길이; i ++) {
sb.append (allchar.charat (random.nextint (allchar.length ()));
}
반환 sb.toString ();
}
/**
* 고정 길이의 랜덤 순수 문자 문자리를 반환합니다 (상단 및 소문자 만 포함)
* @param 길이 임의 문자열 길이
* @return Random String
*/
공개 정적 문자열 GeneratemixString (int length)
{
StringBuffer sb = new StringBuffer ();
랜덤 random = new random ();
for (int i = 0; i <길이; i ++)
{
sb.append (allchar.charat (random.nextInt (letrchchar.length ()));
}
반환 sb.toString ();
}
/**
* 고정 길이의 랜덤 퓨어 캐롤 레터 문자리를 반환합니다 (대문자 만 포함)
*
* @param 길이 임의 문자열 길이
* @return Random String
*/
공개 정적 문자열 generatelowerstring (int length) {
return generatemixstring (length) .tolowercase ();
}
/**
* 고정 길이 무작위 순수 소문자 문자리를 반환합니다 (대문자 및 소문자 포함)
*
* @param 길이 임의 문자열 길이
* @return Random String
*/
공개 정적 문자열 generateupperstring (int length) {
return generatemixstring (length) .toupperCase ();
}
/**
* 고정 길이 순수 0 문자열을 생성합니다
*
* @param 길이 문자열 길이
* @return pure 0 문자열
*/
공개 정적 문자열 GenerateZeroString (int length) {
StringBuffer sb = new StringBuffer ();
for (int i = 0; i <길이; i ++) {
sb.append ( '0');
}
반환 sb.toString ();
}
/**
* 숫자에 따라 고정 길이 문자열을 생성하면 길이가 이전의 길이에 추가되기에 충분하지 않습니다.
*
* @param num 번호
* @param fixlenth String 길이
* @return 고정 길이 문자열
*/
public static String tofixdlengthstring (long num, int fixlenth) {
StringBuffer sb = new StringBuffer ();
문자열 strnum = string.valueof (num);
if (fixlenth -strnum.length ()> = 0) {
sb.append (GenerateZeroString (FixLenth -Strnum.length ()));
} 또 다른 {
새로운 runtimeexception ( " + fixlenth +"예외가있는 길이가있는 문자열로 "숫자" + num + "를 던지십시오.");
}
sb.append (strnum);
반환 sb.toString ();
}
/**
* 숫자에 따라 고정 길이 문자열을 생성하면 길이가 이전의 길이에 추가되기에 충분하지 않습니다.
*
* @param num 번호
* @param fixlenth String 길이
* @return 고정 길이 문자열
*/
public static String tofixdlengthstring (int num, int fixlenth) {
StringBuffer sb = new StringBuffer ();
문자열 strnum = string.valueof (num);
if (fixlenth -strnum.length ()> = 0) {
sb.append (GenerateZeroString (FixLenth -Strnum.length ()));
} 또 다른 {
새로운 runtimeexception ( " + fixlenth +"예외가있는 길이가있는 문자열로 "숫자" + num + "를 던지십시오.");
}
sb.append (strnum);
반환 sb.toString ();
}
/**
* 매번 생성되는 LEN 자리의 수는 다릅니다.
* @param param
* @고정 길이 수
*/
public static int getnotsimple (int [] param, int len)
{
랜덤 rand = 새로운 랜덤 ();
for (int i = param.length; i> 1; i-)
{
int index = rand.nextInt (i);
int tmp = param [index];
param [index] = param [i -1];
param [i -1] = tmp;
}
int result = 0;
for (int i = 0; i <len; i ++)
{
결과 = 결과 * 10 + param [i];
}
반환 결과;
}
public static void main (String [] args) {
System.out.println (Generatestring (10));
System.out.println (GeneratemixString (10));
System.out.println (Generatelowerstring (10));
System.out.println (GenerateUpperstring (10));
System.out.println (GenerateZeroString (10));
System.out.println (tofixdlengrsstring (123, 10));
System.out.println (tofixdlengthstring (123l, 10));
int [] in = {1,2,3,4,5,6,7};
System.out.println (getNotsimple (in, 3));
}
}