如何从数组中随机选取一个元素

时间:2011-11-09 13:13:30

标签: java

我正在寻找从整数数组中随机选择数字的解决方案。

例如我有一个数组new int[]{1,2,3},我如何随机选择一个数字?

13 个答案:

答案 0 :(得分:142)

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

答案 1 :(得分:11)

您可以使用Random生成器生成随机索引并返回该索引处的元素:

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

答案 2 :(得分:7)

如果您要多次获取随机元素,则需要确保您的随机数生成器仅初始化一次。

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.security.SecureRandom而不是Random。这确保了如果有人知道最后几个选秀权,他们就不会有猜测下一个选秀权的优势。

如果您想使用泛型从Object数组中选择一个随机数,您可以定义一个方法(Avinash R中的来源Random element from string array):

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

答案 3 :(得分:3)

使用java.util.Random生成0到数组长度之间的随机数:random_number,然后使用随机数得到整数:array[random_number]

答案 4 :(得分:3)

使用Random类:

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

答案 5 :(得分:2)

您也可以使用

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之间{独占} {(1)}

转换为array.length会向下舍入,并在int(包含)和0(包括)之间提供整数

答案 6 :(得分:1)

由于你有java 8,另一种解决方案是使用Stream API。

None

其中new Random().ints(1, 500).limit(500).forEach(p -> System.out.println(list[p])); 是生成的最低int(包括),1是最高的(不包括)。 500表示您的信息流长度为500。

limit

随机来自 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])); 包。

答案 7 :(得分:1)

在 Java 7 中,可以使用 How to synchronize all methods in class python3?

<块引用>

一个与当前线程隔离的随机数生成器。与 Math 类使用的全局 Random 生成器一样,ThreadLocalRandom 使用内部生成的种子初始化,否则可能无法修改。如果适用,在并发程序中使用 ThreadLocalRandom 而不是共享 Random 对象通常会遇到更少的开销和争用。当多个任务(例如,每个任务一个 ForkJoinTask)在线程池中并行使用随机数时,使用 ThreadLocalRandom 特别合适。

import pathlib
from google.colab import drive
drive.mount('/content/gdrive')
data_dir = "gdrive/My Drive/flower_photos"
data_dir = pathlib.Path(data_dir)

也可以编写通用版本,但它不适用于原始数组。

public static int getRandomElement(int[] arr){
    return arr[ThreadLocalRandom.current().nextInt(arr.length)];
}

//Example Usage:
int[] nums = {1, 2, 3, 4};
int randNum = getRandomElement(nums);
System.out.println(randNum);

答案 8 :(得分:0)

Java在java.util包中有一个Random类。使用它您可以执行以下操作:

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

希望这有帮助!

答案 9 :(得分:0)

看看这个问题:

How do I generate random integers within a specific range in Java?

你需要生成一个从0到整数长度的随机数 - 1.然后只需从数组中获取你的int:

myArray[myRandomNumber];

答案 10 :(得分:0)

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

答案 11 :(得分:0)

package io.github.baijifeilong.tmp;

import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Stream;

/**
 * Created by BaiJiFeiLong@gmail.com at 2019/1/3 下午7:34
 */
public class Bar {
    public static void main(String[] args) {
        Stream.generate(() -> null).limit(10).forEach($ -> {
            System.out.println(new String[]{"hello", "world"}[ThreadLocalRandom.current().nextInt(2)]);
        });
    }
}

答案 12 :(得分:-1)

您也可以尝试这种方法..

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

    }