我正在寻找从整数数组中随机选择数字的解决方案。
例如我有一个数组new int[]{1,2,3}
,我如何随机选择一个数字?
答案 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();
}
}