【问题标题】:Im trying to get 21 random numbers, between 0 and 21 and non of them can be equals to each other我试图获得 21 个随机数,介于 0 和 21 之间,并且它们不能彼此相等
【发布时间】:2014-07-30 23:14:10
【问题描述】:

您好,我正在尝试输入 21 个数字。 它们都必须是 0 - 21 之间的数字。

听起来很简单……但是

它们需要按随机顺序排列 和非关闭它们可以相等

我尝试了很多东西,但其中一些总是相同的

请帮忙! :)

public void getIngrediet(){

    board[1][5] += getRandomIngredient();
    board[1][4] += getRandomIngredient();
    board[1][3] += getRandomIngredient();
    board[1][2] += getRandomIngredient();
    board[1][1] += getRandomIngredient();

    board[2][5] += getRandomIngredient();

    board[2][3] += getRandomIngredient();

    board[2][1] += getRandomIngredient();

    board[3][5] += getRandomIngredient();
    board[3][4] += getRandomIngredient();
    board[3][3] += getRandomIngredient();
    board[3][2] += getRandomIngredient();
    board[3][1] += getRandomIngredient();

    board[4][5] += getRandomIngredient();

    board[4][3] += getRandomIngredient();

    board[4][1] += getRandomIngredient();

    board[5][5] += getRandomIngredient();
    board[5][4] += getRandomIngredient();
    board[5][3] += getRandomIngredient();
    board[5][2] += getRandomIngredient();
    board[5][1] += getRandomIngredient();
}

public String getRandomIngredient(){
    r = new Random();

    int i1 = r.nextInt(21);
    String randomID = String.valueOf(i1);

    boolean b[] = new boolean[21];

    if(b[0] == false){b[0] = true; return randomID;}
    if(b[1] == false){b[1] = true; return randomID;}
    if(b[2] == false){b[2] = true; return randomID;}
    if(b[3] == false){b[3] = true; return randomID;}
    if(b[4] == false){b[4] = true; return randomID;}
    if(b[5] == false){b[5] = true; return randomID;}
    if(b[6] == false){b[6] = true; return randomID;}
    if(b[7] == false){b[7] = true; return randomID;}
    if(b[8] == false){b[8] = true; return randomID;}
    if(b[9] == false){b[9] = true; return randomID;}
    if(b[10] == false){b[10] = true; return randomID;}
    if(b[11] == false){b[11] = true; return randomID;}
    if(b[12] == false){b[12] = true; return randomID;}
    if(b[13] == false){b[13] = true; return randomID;}
    if(b[14] == false){b[14] = true; return randomID;}
    if(b[15] == false){b[15] = true; return randomID;}
    if(b[16] == false){b[16] = true; return randomID;}
    if(b[17] == false){b[17] = true; return randomID;}
    if(b[18] == false){b[18] = true; return randomID;}
    if(b[19] == false){b[19] = true; return randomID;}
    if(b[20] == false){b[20] = true; return randomID;}

    //Else ill get a error
    return "99";
}

【问题讨论】:

标签: java random counter


【解决方案1】:

只需用 0-21 列一个列表并随机播放。

List<Integer> list = new ArrayList<>(21);
for (int i = 0; i < 21; i++)
    list.add(i);
Collections.shuffle(list);
System.out.println(list);

【讨论】:

    【解决方案2】:

    将您检索到的每个随机数保存到一个数组中,然后对于每个新的随机数,检查该数组,如果匹配,则获取另一个随机数,直到它是唯一的

    【讨论】:

      【解决方案3】:

      将您生成的每个随机数保存到SetSet 属性不允许添加重复项,因此可以保证没有重复值。如果您使用LinkedHashSet,您还可以保证插入顺序(即,数字随机出现的顺序与您从集合中出现的顺序相同)。

      您还希望在获得 20 个左右的值后停止接受值。

      我将假设您的范围为 [0, 21),基本上让您大致了解代码的外观:

      public Set<Integer> generateUniqueRandomNumbers(int maxValue) {
          final Set<Integer> uniqueRandomNumbers = new LinkedHashSet<>();
          final Random random = new Random();
          while(uniqueRandomNumbers.size() < maxValue) {
              uniqueRandomNumbers.add(random.nextInt(maxValue));
          }
          return uniqueRandomNumbers;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-19
        • 2018-09-28
        • 2021-09-28
        • 1970-01-01
        • 1970-01-01
        • 2010-10-11
        相关资源
        最近更新 更多