1. Cómo generar números aleatorios de Java
En Java, hay tres conceptos generales de números aleatorios.
1. Use System.CurrentTimemillis () para obtener un número de milisegundos de tipo largo en la hora actual.
2. Devuelva un valor doble entre 0 y 1 a través de Math.Random ().
3. Genere un número aleatorio a través de la clase aleatoria.
2. Descripción aleatoria de la API
1. Descripción de la API de Java
Se utiliza una instancia de la clase aleatoria para generar una secuencia de números pseudo-aleatorio. Esta clase usa semillas de 48 bits y las modifica utilizando fórmulas de congruencia lineal (ver Donald Knuth's The Art of Computer Programming, Volumen 2, Sección 3.2.1).
Si se crean dos instancias aleatorias con la misma semilla, se realiza la misma secuencia de llamadas de método en cada instancia y generarán y devolverán la misma secuencia de números. Para garantizar la implementación de atributos, se especifica un algoritmo específico para la clase aleatoria.
Muchas aplicaciones encontrarán el método aleatorio en la clase de matemáticas más fácil de usar.
2. Resumen del método
Aleatorio()
Cree un nuevo generador de números aleatorios.
Aleatorio (semilla larga)
Cree un nuevo generador de números aleatorios usando una sola semilla larga:
Public Random (Long Seed) {SetSeed (semilla);
protegido intsex (int bits)
Genere el próximo número de pseudo-aleatorio.
boolean nextboolean ()
Devuelve el siguiente número pseudo-aleatorio, que es un valor booleano distribuido uniformemente tomado de la secuencia de este generador de números aleatorios.
vacío Nextbytes (byte [] bytes)
Genere bytes aleatorios y colóquelos en una matriz de bytes suministrada por el usuario.
Double NextDouble ()
Devuelve el siguiente número pseudo-aleatorio, que es un valor doble distribuido entre 0.0 y 1.0, tomado de la secuencia de este generador de números aleatorios.
FLOAT NEXTFLOAT ()
Devuelve el siguiente número pseudo-aleatorio, que es un valor flotante distribuido uniformemente entre 0.0 y 1.0, tomado de la secuencia de este generador de números aleatorios.
Doble NextGaussian ()
Devuelve el siguiente número pseudo-aleatorio, que es una distribución gaussiana ("normalmente") tomada de la secuencia de este generador de números aleatorios, con un promedio de 0.0 y una desviación estándar de 1.0.
int nextInt ()
Devuelve el siguiente número pseudo-aleatorio, que es el valor INT distribuido uniformemente en la secuencia de este generador de números aleatorios.
int nextint (int n)
Devuelve un número pseudo-aleatorio, que es un valor INT distribuido uniformemente entre 0 (incluyendo) y el valor especificado (excluyendo) tomado de la secuencia de este generador de números aleatorios.
Long NextLong ()
Devuelve el siguiente número pseudo-aleatorio, que es un valor largo distribuido uniformemente tomado de la secuencia de este generador de números aleatorios.
Vacío Setseed (semilla larga)
Establezca la semilla de este generador de números aleatorios usando una sola semilla larga.
3. Instrucciones de uso de clase aleatoria
1. La diferencia entre llevar semillas y no llevar semillas
El uso fundamental de la clase aleatoria es dividir las instancias de aleatorias con semillas y sin semillas.
En términos de laicos, la diferencia entre los dos es:
Para las semillas, el resultado generado por cada ejecución es el mismo.
Si no tiene semillas, lo que genera es aleatorio cada vez que corre, y no hay ningún patrón en absoluto.
2. Crea un objeto aleatorio sin semillas
Aleatorio aleatorio = new Random ();
3. Crea un objeto aleatorio sin semillas
Hay dos formas:
1) aleatorio aleatorio = nuevo aleatorio (555L);
2) aleatorio aleatorio = new Random ();
Random.SetSeed (555L);
4. Aplicación integral
La siguiente es una clase de herramienta de número aleatorio recientemente escrita para mostrar el uso:
La copia del código es la siguiente:
import java.util.random;
/**
* Número aleatorio, herramienta de cadena
* Usuario: Leizhimin
* Fecha: 2008-11-19 9:43:09
*/
clase pública RandomUtils {
public static final String allchar = "0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
public static final String LetterChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static final String numberChar = "0123456789";
/**
* Devuelve una cadena aleatoria de longitud fija (incluyendo solo letras y números de mayúsculas y minúsculas)
*
* @param longitud longitud de cadena aleatoria
* @return cadena aleatoria
*/
public static String GenerateString (int long) {
StringBuffer sb = new StringBuffer ();
Aleatorio aleatorio = new Random ();
para (int i = 0; i <longitud; i ++) {
sb.append (allchar.charat (random.nextint (allchar.length ())));
}
return sb.ToString ();
}
/**
* Devuelve una cadena de letra pura aleatoria de longitud fija (incluidas solo letras de la caja superior y minúscula)
*
* @param longitud longitud de cadena aleatoria
* @return cadena aleatoria
*/
public static String GeneratEmIXString (int longitud) {
StringBuffer sb = new StringBuffer ();
Aleatorio aleatorio = new Random ();
para (int i = 0; i <longitud; i ++) {
sb.append (allchar.charat (random.nextint (lotterchar.length ())));
}
return sb.ToString ();
}
/**
* Devuelve una cadena de letra capitales puro de longitud fija (incluidas solo letras de mayúsculas y mayúsculas)
*
* @param longitud longitud de cadena aleatoria
* @return cadena aleatoria
*/
public static String GenerAtelowerString (int longitud) {
return GenerAtemIxString (longitud) .tolowercase ();
}
/**
* Devuelve una cadena de minúsculas pura de longitud fija (incluyendo solo letras mayúsculas y minúsculas)
*
* @param longitud longitud de cadena aleatoria
* @return cadena aleatoria
*/
public static String GenerateUpperString (int longitud) {
return GenerAtemImString (longitud) .ToUpperCase ();
}
/**
* Generar una cadena 0 de longitud fija
*
* @param longitud longitud de cadena
* @return puro 0 cadena
*/
Public static string GenerAzerostring (int longitud) {
StringBuffer sb = new StringBuffer ();
para (int i = 0; i <longitud; i ++) {
sb.append ('0');
}
return sb.ToString ();
}
/**
* Generar una cadena de longitud fija basada en el número, la longitud no es suficiente para agregarse al anterior.
*
* @param num número
* @param Longitud de cadena FixDlenthdLenthdLent
* @return Cadena de longitud fija
*/
public static string tofixdLengthString (long num, int fixdlenth) {
StringBuffer sb = new StringBuffer ();
String strnum = string.ValueOf (num);
if (fixDlenth - strnum.length ()> = 0) {
sb.append (GenerAcleSezeString (FixDLenth - strnum.length ()));
} demás {
Tire nuevo RuntimeException ("Convertir número" + num + "a una cadena con longitud" + fixDlenth + "La excepción ocurre!");
}
sb.append (strnum);
return sb.ToString ();
}
/**
* Generar una cadena de longitud fija basada en el número, la longitud no es suficiente para agregarse al anterior.
*
* @param num número
* @param Longitud de cadena FixDlenthdLenthdLent
* @return Cadena de longitud fija
*/
public static string tofixdLengthString (int num, int fixdlenth) {
StringBuffer sb = new StringBuffer ();
String strnum = string.ValueOf (num);
if (fixDlenth - strnum.length ()> = 0) {
sb.append (GenerAcleSezeString (FixDLenth - strnum.length ()));
} demás {
Tire nuevo RuntimeException ("Convertir número" + num + "a una cadena con longitud" + fixDlenth + "La excepción ocurre!");
}
sb.append (strnum);
return 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 (GenerAleseString (15));
System.out.println (tofixdLengthString (123, 15));
System.out.println (tofixdLengthString (123l, 15));
}
}
Resultados de ejecución:
vwmbpinbzfgcphg
23hyrahdjkpwmv
tigowetbwkm1nde
Bpz1knejphb115n
00000000000000000000
0000000000000000123
0000000000000000123
Proceso terminado con el código de salida 0
6. Resumen
1. Los números aleatorios se usan muy comúnmente.
2. Los objetos de clase aleatoria tienen una diferencia entre si llevan semillas.
3. Hay dos formas de crear objetos de semillas con números aleatorios, con el mismo efecto. Pero los números aleatorios con semillas no parecen ser de gran utilidad.
4. Las funciones aleatorias cubren las funciones de Math.random ().
5. Puede usar números aleatorios para implementar datos aleatorios complejos como cadenas aleatorias.
6. No estudie números aleatorios que no se repitan, no es muy significativo.
Código suplementario:
La copia del código es la siguiente:
paquete com.test;
import java.util.random;
clase pública RandomUtils {
public static final String allchar = "0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
public static final String LetterChar = "ABCDEFGHIJKLLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static final String numberChar = "0123456789";
/**
* Devuelve una cadena aleatoria de longitud fija (incluyendo solo letras y números de mayúsculas y minúsculas)
* @param longitud longitud de cadena aleatoria
* @return cadena aleatoria
*/
Public static string GenerateString (int longitud)
{
StringBuffer sb = new StringBuffer ();
Aleatorio aleatorio = new Random ();
para (int i = 0; i <longitud; i ++) {
sb.append (allchar.charat (random.nextint (allchar.length ())));
}
return sb.ToString ();
}
/**
* Devuelve una cadena de letra pura aleatoria de longitud fija (incluidas solo letras de la caja superior y minúscula)
* @param longitud longitud de cadena aleatoria
* @return cadena aleatoria
*/
Cadena estática pública GenerateMixString (longitud int)
{
StringBuffer sb = new StringBuffer ();
Aleatorio aleatorio = new Random ();
para (int i = 0; i <longitud; i ++)
{
sb.append (allchar.charat (random.nextint (lotterchar.length ())));
}
return sb.ToString ();
}
/**
* Devuelve una cadena de letra capitales puro de longitud fija (incluidas solo letras de mayúsculas y mayúsculas)
*
* @param longitud longitud de cadena aleatoria
* @return cadena aleatoria
*/
public static String GenerAtelowerString (int longitud) {
return GenerAtemIxString (longitud) .tolowercase ();
}
/**
* Devuelve una cadena de minúsculas pura de longitud fija (incluyendo solo letras mayúsculas y minúsculas)
*
* @param longitud longitud de cadena aleatoria
* @return cadena aleatoria
*/
public static String GenerateUpperString (int longitud) {
return GenerAtemImString (longitud) .ToUpperCase ();
}
/**
* Generar una cadena 0 de longitud fija
*
* @param longitud longitud de cadena
* @return puro 0 cadena
*/
Public static string GenerAzerostring (int longitud) {
StringBuffer sb = new StringBuffer ();
para (int i = 0; i <longitud; i ++) {
sb.append ('0');
}
return sb.ToString ();
}
/**
* Generar una cadena de longitud fija basada en el número, la longitud no es suficiente para agregarse al anterior.
*
* @param num número
* @param Longitud de cadena FixDlenthdLenthdLent
* @return Cadena de longitud fija
*/
public static string tofixdLengthString (long num, int fixdlenth) {
StringBuffer sb = new StringBuffer ();
String strnum = string.ValueOf (num);
if (fixDlenth - strnum.length ()> = 0) {
sb.append (GenerAcleSezeString (FixDLenth - strnum.length ()));
} demás {
Tire nuevo RuntimeException ("Convertir número" + num + "a una cadena con longitud" + fixDlenth + "La excepción ocurre!");
}
sb.append (strnum);
return sb.ToString ();
}
/**
* Generar una cadena de longitud fija basada en el número, la longitud no es suficiente para agregarse al anterior.
*
* @param num número
* @param Longitud de cadena FixDlenthdLenthdLent
* @return Cadena de longitud fija
*/
public static string tofixdLengthString (int num, int fixdlenth) {
StringBuffer sb = new StringBuffer ();
String strnum = string.ValueOf (num);
if (fixDlenth - strnum.length ()> = 0) {
sb.append (GenerAcleSezeString (FixDLenth - strnum.length ()));
} demás {
Tire nuevo RuntimeException ("Convertir número" + num + "a una cadena con longitud" + fixDlenth + "La excepción ocurre!");
}
sb.append (strnum);
return sb.ToString ();
}
/**
* El número de dígitos de LEN generados cada vez es diferente
* @param param
* @Return número de longitud fija
*/
Public static int getNotsImple (int [] param, int len)
{
Rand aleatorio = new Random ();
para (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 resultado = 0;
para (int i = 0; i <len; i ++)
{
resultado = resultado * 10 + param [i];
}
resultado de retorno;
}
public static void main (string [] args) {
System.out.println (GeneratEtring (10));
System.out.println (GenerateMixString (10));
System.out.println (GenerAtelowerString (10));
System.out.println (generateUpperString (10));
System.out.println (GenerAcleSezeString (10));
System.out.println (tofixdLengthString (123, 10));
System.out.println (tofixdLengthString (123l, 10));
int [] in = {1,2,3,4,5,6,7};
System.out.println (getNotsImple (en, 3));
}
}