¿Por qué mi método de generador aleatorio no funciona en Java?

Random aleatorio = nuevo aleatorio (42);

Creará el mismo número cada vez. Estás creando un nuevo Aleatorio cada vez con la misma semilla (42).

Cambiar 42 a 0 creará un nuevo Random con una semilla basada en varias cosas, incluido el tiempo. Incluso eso podría crear la misma secuencia aleatoria, si la rutina se ejecuta por segunda vez dentro de 1 milisegundo.

La solución más fácil es crear rand fuera de este método, como

Rand aleatorio estático = nuevo aleatorio ();
public static int randomNums (int randomVal) {
randomVal = rand.nextInt ((20-1) +1) +1;
return randomVal;
}

Tenga en cuenta que no es necesario pasar randomVal como parámetro y, de hecho, no lo está utilizando. Su valor se sobrescribe inmediatamente.

Entonces aún mejor es:

Rand aleatorio estático = nuevo aleatorio ();
public static int randomNums () {
int randomVal = rand.nextInt ((20-1) +1) +1;
return randomVal;
}

O incluso más simple:

Rand aleatorio estático = nuevo aleatorio ();
public static int randomNums () {
return rand.nextInt ((20-1) +1) +1;
}

En este punto, cuando el método solo contiene una línea, comienzas a preguntarte si debería ser un método. Pero ese es un tema diferente.

Porque los números aleatorios de las computadoras son números pseudoaleatorios. No soy una persona de Java, sin embargo, si lees sobre cómo sembrar tus números aleatorios en Google o StackOverflow obtendrás una respuesta.

Debe ser más específico ya que no funciona. Aquí hay un código de trabajo para mí. Está utilizando el mismo valor de inicialización para cada iteración.

clase pública RandonNumberGenerator {

public static void main (String [] args) {
usingThreadLocale (0,9999);
randInt (0,9999);

}
// JDK> = 1.7
vacío público estático usando ThreadLocale (int min, int max) {
int randomNum = ThreadLocalRandom.current (). nextInt (min, max + 1);
System.out.println (randomNum);
}

//JDK<=1.7
public static void randInt (int min, int max) {

Aleatorio aleatorio = nuevo Aleatorio ();
int randomNum = random.nextInt ((max – min) + 1) + min;

System.out.println (randomNum);
}
}

También llamé al método aleatorio anterior a otro método llamado randomAdd con el código: ascii = ascii + randomNums (ascii); lo que terminaría devolviendo un carácter al final, y llamé randomAdd nuevamente a main para mostrar los caracteres aleatorios, pero no son aleatorios, mi programa permanece sin cambios.

More Interesting

Después de que termina el programa de programación (estructuras de datos y algoritmo), ¿qué se les enseña a los estudiantes en CSE después de eso?

Actualmente estoy leyendo un libro sobre estructuras de datos y algoritmos. ¿Cuáles son algunos recursos que puedo usar para practicar la implementación?

¿Cuáles son los beneficios del ordenamiento dinámico y sus desventajas en comparación con otros algoritmos de ordenamiento?

¿Cuáles son los diferentes factores involucrados en el análisis del algoritmo?

¿Cuál es el enfoque algorítmico para encontrar el primer entero positivo que falta si se proporciona una matriz entera sin clasificar en O (n) complejidad de tiempo y espacio constante?

¿Tengo que estudiar matemáticas discretas, algoritmos y estructura de datos para convertirme en un buen desarrollador de Android?

¿Es posible cuantificar la experiencia laboral?

Dada una matriz con 100 elementos (números del 0 al 99), si saco un elemento aleatorio, ¿cómo encontrarías el que saqué? ¿Cómo resolvería esto si 1: la matriz está ordenada o 2: la matriz no está ordenada?

¿Codeforces tiene un problema de ética?

¿Cuál es el mejor algoritmo de reconocimiento de patrones hoy?

¿Cuál es el mejor algoritmo para encontrar números primos? ¿Cuál es su sintaxis?

Yoshua Bengio: ¿Puede el aprendizaje profundo encontrar un nuevo algoritmo de clasificación?

¿Qué tipo de trabajo haría un cosmólogo en el CERN?

Conozco estructuras de datos y algoritmos. ¿Cómo programo un compilador simple?

¿Cuál es el programa C para encontrar la subsecuencia repetida más larga en un texto dado?