这是我的问题:我有一个整数数组,我会以随机方式恢复 20% 的数组元素。java中是否有一个函数具有多个随机值?我只测试了一个值:
Random rand=new Random();
int min=0, max=10;
int valeur = rand.nextInt(max - min + 1) + min;
这是我的问题:我有一个整数数组,我会以随机方式恢复 20% 的数组元素。java中是否有一个函数具有多个随机值?我只测试了一个值:
Random rand=new Random();
int min=0, max=10;
int valeur = rand.nextInt(max - min + 1) + min;
获得随机但不同的值的最简单方法是使用 shuffle。
List<Integer> list = new ArrayList<>();
for(int i = min; i <= max; i++) list.add(i);
Collections.shuffle(list);
您可以迭代list
并以随机顺序获取唯一编号。
如果您想要不超过两个和三个其他东西,您甚至可以使用这种方法,方法是将您想要的数字添加到列表中。
顺便说一句:这种方法对于 n 个数字是 O(n),而生成随机数并检查它们是否已经存在是 O(n^2 * log(n)),这要慢得多。
如果我正确理解了您的问题,那么您正在尝试获取“随机”数组。如果是这样,您可以使用以下内容:
int nrOfValues = 20;
int[] values = new int[nrOfValues];
for(int i = 0; i < values.length; i++)
{
values[i] = rand.nextInt(max - min + 1) + min;
}
如果您想获得不同的随机值,请尝试以下操作:
ArrayList<Integer> values = new ArrayList<Integer>();
int nrOfValues = 20;
for(int i = 0; i < values.length; i++)
{
int value = rand.nextInt(max - min + 1) + min;
while(values.contains(value))
value = rand.nextInt(max - min + 1) + min;
values.add(value);
}
当然,如果min
和max
选择不当,您最终可能会陷入无限循环......
这将防止数字被使用两次并将获得 20%:
int[] nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Random random = new Random();
int numsFound = 0;
int twentyPercent = (int)(nums.length/5F);
List<Integer> usedIndices = new ArrayList<Integer>();
while (numsFound < twentyPercent) {
int index = random.nextInt(nums.length);
if (!usedIndices.contains(index)) { // not already used?
System.out.println(nums[index]);
usedIndices.add(index);
numsFound++;
}
}
试试这个。
import java.util.Random;
public class Dice
{
public static void main(String[] args)
{
// Initialize Variables and Array
Random rand = new Random();
int[] numbers = new int[10];
int min = 0, max = 10;
// Input Random Number Into 10 Elements Of Array
for (int i = 0; i < numbers.length; i++)
numbers[i] = rand.nextInt(max - min + 1) + min;
// Output 10 Array Cells
for (int i = 0; i < numbers.length; i++)
System.out.println(numbers[i]);
}
}
我不太明白这个问题。。
据我了解,你需要这样的东西
List<Integer> listOfRandomNumbers = new ArrayList<Integer>();
//Initialize this List with required numbers
int numberOfRandomNumbersNeeded = listOfRandomNumbers/5;
int min = 0;
int max = listOfRandomNumbers.size() - 1;
Random rand = new Random();
Set<Integer> randomNumbers = new HashSet<Integer>();
while(randomNumbers.size() < numberOfRandomNumbersNeeded) {
int value = rand.nextInt(max - min + 1) + min;
randomNumbers.add(listOfRandomNumbers.get(value));
}
System.out.println(randomNumbers);
private Integer[] recover(double percentage, Integer[] ints) {
int numberOfElementsToRecover = (int) (ints.length*percentage);
List<Integer> list = Arrays.asList(ints);
Collections.shuffle(list);
return Arrays.copyOfRange(list.toArray(new Integer[]{}), 0, numberOfElementsToRecover);
}