我正在寻找从整数数组中随机选择数字的解决方案。
例如,我有一个数组new int[]{1,2,3}
,如何随机选择一个数字?
我正在寻找从整数数组中随机选择数字的解决方案。
例如,我有一个数组new int[]{1,2,3}
,如何随机选择一个数字?
public static int getRandom(int[] array) {
int rnd = new Random().nextInt(array.length);
return array[rnd];
}
generator
Тў»java.util.Random
у▒╗уџёСИђСИфт«ъСЙІсђѓ - stivloRandom()
:随机数生成器应该具有历史记录。如果没有历史记录,它就非常易于预测。在这种情况下这并不是一个问题——但应该提到array[(int)(System.currentTimeMillis() % array.length)]
同样好用于所提出的解决方案。 - alfnew Random()
尝试创建一个具有与以前创建的任何 Random
实例不同的种子的实例。您的方法如果在短时间内调用函数两次将会出现严重问题。 - aioobe//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)];
}
}
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 7中,可以使用ThreadLocalRandom
。
这是一个仅限于当前线程的随机数生成器。类似于Math类使用的全局Random生成器一样,ThreadLocalRandom使用内部生成的种子进行初始化,可能不会被修改。在并发程序中,如果适用的话,使用ThreadLocalRandom而不是共享的Random对象通常会遇到更少的开销和争用。当多个任务(例如每个ForkJoinTask)在线程池中并行使用随机数时,使用ThreadLocalRandom特别合适。
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);
也可以编写通用版本,但对于原始数组不起作用。
public static <T> T getRandomElement(T[] arr){
return arr[ThreadLocalRandom.current().nextInt(arr.length)];
}
//Example Usage:
String[] strs = {"aa", "bb", "cc"};
String randStr = getRandomElement(strs);
System.out.println(randStr);
使用Random类:
int getRandomNumber(int[] arr)
{
return arr[(new Random()).nextInt(arr.length)];
}
标签。
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.util.Random
生成一个介于0和数组长度之间的随机数:random_number
,然后使用这个随机数获取整数:array[random_number]
Java在java.util包中有一个Random类。使用它,您可以执行以下操作:
Random rnd = new Random();
int randomNumberFromArray = array[rnd.nextInt(3)];
既然你已经安装了Java 8,另一种解决方案是使用Stream API。
new Random().ints(1, 500).limit(500).forEach(p -> System.out.println(list[p]));
1
是最低的整数(包含),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]));
Random来自java.util
包。