long
, ya que la semilla está limitada a 48 bits.Tabla de Contenidos
siette.uti.Random
La clase siette.util.Random emula una extension de la clase java.util.Random, pero permite redefinir os constructores de manera que todos los objetos creados a partir de esta clase compartan la misma semilla. Esto permite reproducir exactamente las instacias de preguntas generadas, con solo guardar la semilla, siempre y cuando no haya habido modificaciones en el orden de generación de números aleatorios. El objetivo es que dada una semilla se produzca siempre la misma instancia.
Esta clase tiene los siguientes métdos públicos:
Constructor
public Random() throws RandomException
Crea un objeto, en general no es necesario crear el objeto, ya que Siette lo crea internamente y en el código de las preguntas se utilizan métodos estaticos. Este método sirve simplemente para devolver una referencia al objeto principal, y para que la programación sea similar a la clase java.util.Random
.
Semilla
public static setSeed(long seed) public static long getSeed()
Escribe o lee la semilla del objeto Random
. En general no es necesario utilizar este método, y esta desaconsejando variar la semilla, ya que esto haría que la pregunta no pudiera reproducirse exactamente como se planteo. Son métodos usados por el sistema.
boolean
public static boolean nextBoolean()
Devuelve un valor logico aleatoriamente (true
o false
)
double
public static double nextDouble()
Devuelve un número real de tipo double
con una distribución uniforme entre 0 y 1.
public static double nextDouble(double min, double max, double step, String format) public static double nextDouble(double min, double max, String format) public static double nextDouble(double min, double max, double step) public static double nextDouble(double min, double max)
Devuelve un número real de tipo double
con una distribución uniforme entre min
y max
(ambos inclusive). Si se añade un argumento step
los valores que se generan serán siempre valores exactos que se obtienen añadiendo aleratoriamente a min
un multiplo de step
. Por ejemplo
int x = Random.nextDouble(0, 2, 0.25);
genera aleatoriamente los valores {0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0}
Si se añade un argumento format
con la especificación definida en java.text.DecimalFormat, se sigue devolviendo un número real de tipo double
pero su valor se trunca para encajar con el formato. Por ejemplo
int x = Random.nextDouble(0, 2, 1/3, "#.##");
genera aleatoriamente los valores {0.00, 0.33, 0.67, 1.00, 1.33, 1.67, 2.00}
public static double nextGausian()
Devuelve un número real de tipo double
con una distribución normal de media 0 y desviación típica 1. Los valores centrales tienen mayor probabilidad de ser generados. Se fuerza que todos los valores estén comprendidos entre -1 y 1.
public static double nextGausian(double min, double max, String format) public static double nextGausian(double min, double max)
Son métodos similares a los que utiliza el método nextDouble
pero utilizando una distribución nnormal de media $(max-min)/2$ y desviación típica proporcional a la anchura del intervalo. En este caso no tiene sentido utilizar el parámetro step
.
float
public static float nextFloat(float min, float max, float step, String format) public static float nextFloat(float min, float max, String format) public static float nextFloat(float min, float max, float step) public static float nextFloat(float min, float max) public static float nextFloat()
Son métodos similares a nextDouble
, pero devolviendo un número de tipo float
.
int
public static double nextInt(int min, int max, int step, String format) public static double nextInt(int min, int max, String format) public static double nextInt(int min, int max, int step) public static double nextInt(int min, int max) public static double nextInt(int max) public static double nextInt() public static double nextPositiveInt()
Son métodos simialres nextDouble
, pero con números de tipo int
. Si no se especifica el valor min
se toma min=0
. Si no se especifica ningún argumento se seleciona un número entero cualquiera entre entre $-2^{31}$ y $2^{31}$ con una distribución uniforme. La última función selecciona solamente números enteros positivos entre 0 y $2^{31}$.
long
public static double nextLong(long min, long max, long step, String format) public static double nextLong(long min, long max, String format) public static double nextLong(long min, long max, long step) public static double nextLong(long min, long max) public static double nextLong(long max) public static double nextLong()
Son métodos similares a nextInt
pero que devuelven números de tipo long
entre $-2^{63}$ y $2^{63}$ con una distribución uniforme. 1)
format
public static String format(double value, String format) public static String format(float value, String format) public static String format(long value, String format) public static String format(int value, String format) public static String format10(double value, String format)
La función format
llama a la clase java.text.DecimalFormat para construir una representación del número value
que se le pasa como argumento.
La función format10
crea una represenación en HTML equivalente a la notación cientifica. El atributo format
se aplica solo a la mantisa. Por ejemplo el número la instruccion:
String st = Random.format10(299792, "#");
da como resultado
3 x 10<sup>5</sup>
que en HTML se muestra como: <html>3 x 105</html>
select
public static Object select(List list) public static Object select(Set set) public static Object select(Object[] obj) public static String select(String[] obj) public static double select(double[] obj) public static float select(float[] obj) public static long select(long[] obj) public static int select(int[] obj)
Las funciones select
sirven para seleccionar un objeto al azar a partir de una colección de objetos, ya sea una lista, un conjunto o un array de elementos. Por ejemplo:
String color = Random.select(new String[] {"rojo","azul","verde","amarillo"});
selecciona aletoriamente una cadena de caracteres que representa uno de estos cuatro colores.
Barajar y permutar
public static List shuffle(List list) public static Object[] shuffle(Object[] obj) public static String[] shuffle(String[] obj) public static double[] shuffle(double[] obj) public static float[] shuffle(float[] obj) public static long[] shuffle(long[] obj) public static int[] shuffle(int[] obj)
Estas funciones devuelven un objeto igaul que el que reciben pero con los elementos en un orden aleatorio Por ejemplo, la isntruccion:
int nums = {0,1,2,3,4,5,6,7,8,9} nums = Random.shuffle(nums);
hace que el valor de la variable nums
cambie a:
4,6,2,7,8,3,0,9,1,5
public static int[] permutation(int n)
La funcionpermutacion
hace exactamente lo mismo que barajar en el ejemplo anterior, pero solo hay que indicarle el numero de valores enteros que se desea permutar. Es decir, para obtener el mismo resultado que el ejemplo anterior bastaria con utilizar la llamada a la funcion:
int nums = Random.permutacion(9);
Otras funciones
public static String code(int n)
Devuelve un array de n caracteres aleatorio.
public static Object[] toObjectArray(List list)
Transforma una lista en un array de objetos.
public static List toList(Object[] list)
Transforma un array de objetos en una lista de objetos.