Как случайным образом выбрать элемент из массива


Я ищу решение, чтобы выбрать число случайным образом из целого массива.

например у меня есть массив new int[]{1,2,3}, Как я могу выбрать число случайным образом?

11 60

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)]);
       }
}

вы также можете попробовать этот подход..

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

    }