【问题标题】:How to generate random unique numbers on java如何在java上生成随机唯一数
【发布时间】:2019-01-26 00:39:06
【问题描述】:

我是 Java 新手,我正在尝试为游戏随机化非重复数字。仅当我不添加 break 语句时,我的代码才会生成从 1 到 75 的唯一随机数(我必须这样做才能当时只获得一个数字)。我该怎么办?编辑-(我想知道它不断重置的原因是否是因为我多次调用该方法?我不太确定如何解决)

public static void genNumber() {
    Random random = new Random();

   int num;
    String u; 
    String letter = "";
    HashSet<Integer> used = new HashSet<>(75);
        for (int i = 1; i <= 75; i++){
            ball.add(i);
        }

   while(used.size() > 0) {

    num = 1 + random.nextInt(75);

        if (used.contains(num)){
            used.remove(new Integer(num));


        u = Integer.toString(num); 
        System.out.print(u + "\n");
break; 

        }
        if (!used.contains(num)){
            continue;
        }
       }

这些数字是唯一且随机的,但我一次只想要一个数字(不重复)而不是一次全部 75 个。

【问题讨论】:

标签: java arrays random


【解决方案1】:

每次你想要一个新的随机序列时,也许会洗牌,比如一副纸牌。每个元素都保证是唯一的。

List<Integer> balls = new ArrayList<>();

for (int i = 1; i <= 75; ++i) {
    balls.add(i);
}

for (;;) {
    // Shuffle the list every 75 draws:

    Collections.shuffle(balls);
    System.out.println(Arrays.toString(balls.toArray()));

    // Consume the sequence

    for (Integer ball : balls) {
        take(ball);
    }
}

【讨论】:

  • 绝对是最简单的方法,也可能是最好的方法。
  • 我也觉得这更容易,但我仍然会得到重复的数字,所以我在想每次调用它的方法时数组列表是否会重置?这就是为什么它不会停止重复数字的原因吗?如果是这种情况,我该如何解决?
  • 嗨@RachdiO,没错。该列表应在每个序列之前重新洗牌。上面的例子。
【解决方案2】:

我将创建一个包含 75 个元素的布尔值数组并将所有值设置为 true。创建一个生成一个随机数的方法,并将该值的布尔数组更新为 false。每次生成数字时,请检查数组以查看该值是否设置为 true。然后,您可以继续一次生成一个数字,而不必担心会重复。您可以有一个 while 循环,要求用户输入是或否,如果他们回答否,它不会调用您的方法并将您的 while 循环条件设置为 false。如果他们回答是,它会调用该方法并继续循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    相关资源
    最近更新 更多