Как случайным образом выбрать элемент из массива
Я ищу решение, чтобы выбрать число случайным образом из целого массива.
например у меня есть массив new int[]{1,2,3}
, Как я могу выбрать число случайным образом?
11 ответов:
public static int getRandom(int[] array) { int rnd = new Random().nextInt(array.length); return array[rnd]; }
вы можете использовать генератор случайных чисел для генерации случайного индекса и возврата элемента по этому индексу:
//initialization Random generator = new Random(); int randomIndex = generator.nextInt(myArray.length); return myArray[randomIndex];
Если вы будете получать случайный элемент несколько раз, вы хотите убедиться, что ваш генератор случайных чисел инициализируется только один раз.
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)]; } }
Если вы выбираете случайные элементы массива, которые должны быть непредсказуемыми, вы должны использовать java.безопасность.SecureRandom а не случайные. Это гарантирует, что если кто-то знает последние несколько выборов, у них не будет преимущества в угадывании следующего.
Если вы хотите выбрать случайный number из массива объектов с помощью generics можно определить метод для этого (Source Авинаш Р на случайный элемент из массива строк):
import java.util.Random; public class RandArray { private static Random rand = new Random(); private static <T> T randomFrom(T... items) { return items[rand.nextInt(items.length)]; } }
использовать
java.util.Random
чтобы сгенерировать случайное число от 0 до длины массива:random_number
, а затем использовать случайное число, чтобы получить целое число:array[random_number]
использовать случайные класс:
int getRandomNumber(int[] arr) { return arr[(new Random()).nextInt(arr.length)]; }
поскольку у вас есть java 8, другое решение-использовать Stream API.
new Random().ints(1, 500).limit(500).forEach(p -> System.out.println(list[p]));
здесь
1
является самым низким int генерируется (включительно) и500
- это высшая (исключительная).limit
означает, что ваш поток будет иметь длину 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]));
случайные от
java.util
пакета.
вы также можете использовать
public static int getRandom(int[] array) { int rnd = (int)(Math.random()*array.length); return array[rnd]; }
Math.random()
возвращаетdouble
между0.0
(включительно) в1.0
(эксклюзив)умножение на
array.length
даетdouble
между0.0
(включительно) иarray.length
(эксклюзив)кастинг
int
округляем вниз, давая вам и целое число между0
(включительно) иarray.length-1
(включительно)
взгляните на этот вопрос:
как я могу генерировать случайные числа в определенном диапазоне в Java?
вы хотите, чтобы сгенерировать случайное число от 0 до длины числа - 1. Тогда просто получите свой int из массива:
myArray[myRandomNumber];
Java имеет случайный класс в java.пакет утиль. С его помощью вы можете сделать следующее:
Random rnd = new Random(); int randomNumberFromArray = array[rnd.nextInt(3)];
надеюсь, что это помогает!
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)]); } }