Cómo seleccionar aleatoriamente un elemento de una matriz

Estoy buscando una solución para elegir el número al azar de una matriz de enteros.

Por ejemplo, tengo una matriz new int[]{1,2,3} , ¿cómo puedo elegir un número al azar?

 public static int getRandom(int[] array) { int rnd = new Random().nextInt(array.length); return array[rnd]; } 

Puede usar el generador aleatorio para generar un índice aleatorio y devolver el elemento en ese índice:

 //initialization Random generator = new Random(); int randomIndex = generator.nextInt(myArray.length); return myArray[randomIndex]; 

Si va a obtener un elemento aleatorio varias veces, quiere asegurarse de que su generador de números aleatorios se inicialice solo una vez.

 import java.util.Random; public class RandArray { private int[] items = new int[]{1,2,3}; private Random rand = new Random(); public int getRandArrayElement(){ return items[rand.nextInt(items.length)]; } } 

Si está seleccionando elementos de matriz aleatorios que deben ser impredecibles, debe usar java.security.SecureRandom en lugar de Random. Eso asegura que si alguien conoce las últimas selecciones, no tendrá una ventaja para adivinar la siguiente.

Si está buscando elegir un número aleatorio de una matriz de Objetos usando generics, podría definir un método para hacerlo (Fuente Avinash R en elemento Aleatorio de la matriz de cadenas ):

 import java.util.Random; public class RandArray { private static Random rand = new Random(); private static  T randomFrom(T... items) { return items[rand.nextInt(items.length)]; } } 

use java.util.Random para generar un número aleatorio entre 0 y la longitud del array: random_number , y luego use el número al azar para obtener el entero: array[random_number]

Usa la clase Aleatoria :

 int getRandomNumber(int[] arr) { return arr[(new Random()).nextInt(arr.length)]; } 

Como tiene Java 8, otra solución es usar Stream API.

 new Random().ints(1, 500).limit(500).forEach(p -> System.out.println(list[p])); 

Donde 1 es el int más bajo generado (inclusive) y 500 es el más alto (exclusivo). limit significa que su flujo tendrá una longitud de 500.

  int[] list = new int[] {1,2,3,4,5,6}; new Random().ints(0, list.length).limit(10).forEach(p -> System.out.println(list[p])); 

Aleatorio es del paquete java.util .

También puedes usar

 public static int getRandom(int[] array) { int rnd = (int)(Math.random()*array.length); return array[rnd]; } 

Math.random() devuelve un double entre 0.0 (inclusive) y 1.0 (exclusivo)

Multiplicar esto con array.length te da un double entre 0.0 (inclusive) y array.length (exclusivo)

Casting to int redondeará dando un entero entre 0 (inclusive) y array.length-1 (inclusive)

Eche un vistazo a esta pregunta:

¿Cómo puedo generar enteros aleatorios dentro de un rango específico en Java?

Querrá generar un número aleatorio de 0 a su longitud de enteros – 1. Luego simplemente obtenga su int de su matriz:

 myArray[myRandomNumber]; 

Java tiene una clase aleatoria en el paquete java.util. Utilizándolo, puede hacer lo siguiente:

 Random rnd = new Random(); int randomNumberFromArray = array[rnd.nextInt(3)]; 

¡Espero que esto ayude!

 package workouts; import java.util.Random; /** * * @author Muthu */ public class RandomGenerator { public static void main(String[] args) { for(int i=0;i<5;i++){ rndFunc(); } } public static void rndFunc(){ int[]a= new int[]{1,2,3}; Random rnd= new Random(); System.out.println(a[rnd.nextInt(a.length)]); } } 

También puedes probar este enfoque …

 public static  E[] pickRandom_(int n,E ...item) { List copy = Arrays.asList(item); Collections.shuffle(copy); if (copy.size() > n) { return (E[]) copy.subList(0, n).toArray(); } else { return (E[]) copy.toArray(); } }