像我的问题一样,我需要生成一个范围内具有相同对的随机数。我试图生成随机数并存储在一个数组中,但数字重复超过两次。我有16个随机数在该范围内生成。知道如何让它只生成相同的随机数对吗?
答案 0 :(得分:2)
以下将完成我认为的工作:
import java.util.*;
class Randoms {
public static void main(String[] args) {
List<Integer> randoms = new ArrayList<Integer>();
Random randomizer = new Random();
for(int i = 0; i < 8; ) {
int r = randomizer.nextInt(8) + 1;
if(!randoms.contains(r)) {
randoms.add(r);
++i;
}
}
List<Integer> clonedList = new ArrayList<Integer>();
clonedList.addAll(randoms);
Collections.shuffle(clonedList);
int[][] cards = new int[8][];
for(int i = 0; i < 8; ++i) {
cards[i] = new int[]{ randoms.get(i), clonedList.get(i) };
}
for(int i = 0; i < 8; ++i) {
System.out.println(cards[i][0] + " " + cards[i][1]);
}
}
}
上面的一个示例运行给出:
1 2
8 6
4 3
3 7
2 8
6 1
5 5
7 4
希望有所帮助。
答案 1 :(得分:1)
通常,如果你将要生成的数字放在一个数组中(在你的情况下,一个长度为16的数组,每个包含1,2,...,8),然后随机置换数组,你将得到你想要的。您可以使用代码here随机置换数组。
答案 2 :(得分:0)
我相信这清楚地向您展示了如何解决问题:
public static List<Integer> shuffled8() {
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i <= 8; i++) {
list.add(i);
}
Collections.shuffle(list);
return list;
}
public static void main(String[] args) {
List<Integer> first = shuffled8();
List<Integer> second= shuffled8();
for (int i = 0; i < 8; i++) {
System.out.println(first.get(i) + " " + second.get(i));
}
}
shuffled8
只返回一个洗牌后的数字1到8的列表。由于您需要两个此类列表,因此您需要调用两次,并将其存储在first
和second
中。然后,您将first.get(i)
与second.get(i)
配对,以获取所需的属性。
要概括一下,如果您需要三元组,那么只需添加List<Integer> third = shuffled8();
,然后first.get(i), second.get(i), third.get(i)
是一个具有您想要的属性的三元组。
答案 3 :(得分:0)
我这样做了:
Random random = new Random();
List<Integer> listaCartoes = new ArrayList<Integer>();
for(int i=0; i<8;)
{
int r = random.nextInt(8) + 1;
if(!listaCartoes.contains(r))
{
listaCartoes.add(r);
listaCartoes.add(r);
++i;
}
}
Collections.shuffle(listaCartoes);
希望它有所帮助^ _ ^