生成1到8之间相同对的随机数?

时间:2010-02-25 03:12:43

标签: java

像我的问题一样,我需要生成一个范围内具有相同对的随机数。我试图生成随机数并存储在一个数组中,但数字重复超过两次。我有16个随机数在该范围内生成。知道如何让它只生成相同的随机数对吗?

4 个答案:

答案 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的列表。由于您需要两个此类列表,因此您需要调用两次,并将其存储在firstsecond中。然后,您将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);

希望它有所帮助^ _ ^