java - Java 中的非重复整数列表?任务

标签 java random integer

我正在尝试创建一个包含 20 个介于 0 到 26 之间(因此在 1-25 范围内)的整数的列表,该列表不会作为作业的一部分重复。我以为我已经弄清楚了,但程序不断循环,永远不会结束。谁能帮帮我吗?

import java.util.Random;

public class prog433a
{
    public static void main(String args[])
    {
            Random r = new Random();

            int[] list = new int[20];

            for (int k = 0; k < list.length; k++)
            {
                boolean notADupe = false;

                while (notADupe == false)
                {
                    list[k] = r.nextInt(25) + 1;
                    for (int j = 0; j < list.length; j++)
                    {
                        if (list[j] == list [k] && j != k)
                        {
                            notADupe = true;
                        }
                        else
                        {
                            notADupe = false;
                            break;
                        }

                    }

                System.out.println(list[k]);
            }
        }
    }
}

编辑:这与其他问题不同,因为我试图弄清楚如何使用我在作业中允许使用的方法(本质上是我已经在代码中使用的方法)来检查唯一性.

最佳答案

我认为你已经扭转了现状。里面if ,你应该设置 notADupfalse ,而不是true 。但是,我会将变量设置为 isDup相反,并相应地更改 while 循环。

还有一个建议:代替 while (notADupe == false) ,你应该只使用 while (!notADupe) 。永远不要像这样比较 boolean 变量。有时可能会让您感到惊讶。

因此,要解决您的问题,只需更改您的 if-else阻止:

if (list[j] == list [k] && j != k) {
    notADupe = false;
    break;
} else {
    notADupe = true;
}

顺便说一句,您的解决方案有点复杂。对于每个元素,您都会迭代整个数组以查找重复项。相反,我建议您保留 Set<Integer>存储已经看到的数字,并检查每个随机生成的数字。如果存在,则跳过它并重新生成。

伪代码看起来像这样:

arr = []  // Your list array, initialize to size 20
seen = [] // A Set
for i from 1 -> arr.length
    num = rand.nextInt(25) + 1
    while seen contains num
        num = rand.nextInt(25) + 1
    seen.add(num)
    arr[i] = num

关于java - Java 中的非重复整数列表?任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28702301/

相关文章:

javascript - 如何在javascript中为变量赋予随机值

java - Gradle 运行任务在控制台中运行时接受输入,但不作为 IDEA 运行配置

java - 使用 Retrofit POST 的 Call<T> 类型的用途

java - JSR 305 的状态如何?

c++ - 如何有效地检测 4 个整数变量的对称性?

Python eval 字符串中的整数,并返回整数而不是 ascii 字符

c - 将整数打印为字符数字(无数组/printf/等...)

java - 过滤和分割ArrayList

c++ - srand 根本不是随机的 - 替代品?

使用 set.seed 函数的原因