我想在0-7范围内选择8个随机整数。
int one = (int) (Math.random()*0)+7;
int two = (int) (Math.random()*0)+7;
// ...
int eight = (int) (Math.random()*0)+7;
但是,不允许重复的数字。如何改进此代码以建立此功能?
答案 0 :(得分:0)
按照以下代码段,根据您的偏好更改maxLimit和noOfItems,以获得所需的结果。
此处Set包含指定限制下的唯一整数。
public class RandomIntegers
{
public static final Random random = new Random();
public static final int maxLimit = 8;
public static final int noOfItems = 8;
public static void main( String[] args )
{
Set<Integer> uniqueRandomIntegerSet = new HashSet< Integer >();
while(uniqueRandomIntegerSet.size() < noOfItems)
uniqueRandomIntegerSet.add( random.nextInt( maxLimit ) );
}
}
答案 1 :(得分:0)
我不确定这是否违反了您的要求,但您可以这样做:
public static void main(String[] args) {
List<Integer> randomZeroToSeven = new ArrayList<>();
for (int i = 0; i <= 7; i++) {
randomZeroToSeven.add(i);
}
Collections.shuffle(randomZeroToSeven);
}
或者,您可以跳过shuffle
,每次想要0-7的随机数时,只需从列表中抓取一个随机元素。 EG:
public static void main(String[] args) {
List<Integer> zeroToSeven = new ArrayList<>();
for (int i = 0; i <= 7; i++) {
zeroToSeven.add(i);
}
System.out.println(zeroToSeven.get(new Random().nextInt(8)));
}
答案 2 :(得分:0)
如果您需要生成从min
到max
(包括两者)的数字,您可以写信
random.nextInt(max - min + 1) + min
public static void main(String[] args) throws IOException {
HashSet<Integer>list=new HashSet();
Random random=new Random();
while(list.size()<8){
list.add(random.nextInt(7 - 0 + 1) + 0); // OR list.add(random.nextInt(8));
}
System.out.println(list);
}
答案 3 :(得分:0)
另一种方法是用所有可能性填充数组/集合并从中挑选。从允许的数组中删除每个拾取的项目并将其放入输出数组中,直到您选择了所有项目。
这样你就可以跳过双选,执行是线性的。
这样的事情:
int desiredSize = 8;
List<Integer> allowed = new ArrayList<>();
for (int i = 0; i < desiredSize; i++) {
allowed.add(i);
}
List<Integer> output = new ArrayList<>();
Random random = new Random();
while (output.size() < desiredSize) {
int index = random.nextInt(allowed.size());
output.add(allowed.get(index));
allowed.remove(index);
}
答案 4 :(得分:0)
0-7只有8个整数,所以你真正要求的是随机顺序中0-7的数字。
执行编码和执行的最快方法是对一组整数进行随机播放。
public class Test {
public static void main(String[] args){
List<Integer> list = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7);
Collections.shuffle(list);
for(int i : list){
System.out.println(i);
}
}
}
如果你想自己编写一个shuffle算法,你可以通过交换随机索引的数组中的每个项目(最后一个)来实现。你不做最后一次的原因是因为它会影响结果。见Fisher Yates Shuffle
因为我无法抗拒这里是Fisher Yates的java实现:
public class Test {
public static void main(String[] args){
Random rnd = new SecureRandom();
int[] arr = new int[]{0,1,2,3,4,5,6,7};
for(int i = 0; i < arr.length - 1; i++){
int swapIndex = rnd.nextInt(8);
int tmp = arr[i];
arr[i] = arr[swapIndex];
arr[swapIndex] = tmp;
}
System.out.println(Arrays.toString(arr));
}
}