当前位置: 首页 > 知识库问答 >
问题:

创建不重复的随机整数数组

洪弘毅
2023-03-14

我试图创建一个没有重复的随机数组。

任务是从用户那里获取一个整数数组和最大值,用0到最大值之间的随机数填充数组,并显示没有重复的随机数组,不使用任何其他类,除了随机和扫描仪。

这是一个示例输出:

请输入数组的大小:10

请输入最大值:50

[39,2,17,49,12,19,40,31,42,15]

我需要帮助删除重复的内容。我不确定我所做的是否正确,我是一个初学者,但这是我目前所做的。非常感谢帮助。谢谢。

public class Fill {
    private static int size;
    private static int maxVal;

    public static void main(String[] args) {

        Scanner kb = new Scanner(System.in);

        // Ask user to enter the size of the array
        System.out.print("Please enter the size of the array: ");
        size = kb.nextInt();

        // Ask user to enter the maximum value allowed

        System.out.print("Please enter the maximum value: ");
        maxVal = kb.nextInt();

        // Call fill() method
        int arr[] = fill(size, maxVal);

        // Print filled array
        System.out.print("[");
        for (int i = 0; i < arr.length - 1; i++)
            System.out.print(arr[i] + ",");
        System.out.print(arr[arr.length - 1] + "]");
    }

    public static int[] fill(int size, int maxVal) {
        int arr[] = new int[size];

        Random random = new Random();

        // Fills the array with random numbers between 0 and maximum value
        if (size <= 0 || maxVal < size - 1) {
            System.out.print("Incorrect Parameters. Please Retry");
            main(null);
        } else {
            for (int j = 0; j < size; j++) {
                arr[j] = random.nextInt(maxVal);
                // Check array for duplicates
                for (int k = j + 1; k < size; k++) {
                    if(arr[j] == arr[k]) {
                        //create new random array
                        fill(size, maxVal);
                    }
                }
            }
        }

        return arr;
    }
}

共有1个答案

苍嘉澍
2023-03-14

我已经编辑并修复了您的代码中的一些问题,如下所示:

public class Fill {
    private static int size;
    private static int maxVal;

    public static void main(String[] args) {

        Scanner kb = new Scanner(System.in);

        // Ask user to enter the size of the array
        System.out.print("Please enter the size of the array: ");
        size = kb.nextInt();

        // Ask user to enter the maximum value allowed

        System.out.print("Please enter the maximum value: ");
        maxVal = kb.nextInt();

        // Call fill() method
        int arr[] = fill(size, maxVal);

        // Print filled array
        System.out.print("[");
        for (int i = 0; i < arr.length - 1; i++)
            System.out.print(arr[i] + ",");
        System.out.print(arr[arr.length - 1] + "]");
    }

    public static int[] fill(int size, int maxVal) {
        int arr[] = new int[size];

        Random random = new Random();

        // Fills the array with random numbers between 0 and maximum value
        if (size <= 0 || maxVal < size ) {
            System.out.print("Incorrect Parameters. Please Retry");
            main(null);
        } else {
            for (int j = 0; j < size; j++) {
                int newNumber = random.nextInt(maxVal + 1);
                // Check array for duplicates

                while(alreadyExist(newNumber, arr)){
                    newNumber = random.nextInt(maxVal + 1);
                }
                arr[j] = newNumber;
            }
        }

        return arr;
    }

    static boolean alreadyExist(int a, int[] arr){
        for(int i = 0 ; i < arr.length ; i++){
            if(arr[i] == a) return true;
        }
        return false;
    }
}

现在它不返回任何重复值。

 类似资料:
  • 在本例中,最大值仅为5,因此我可以逐个检查副本,但如何以更简单的方式执行此操作?例如,如果最大值为20,该怎么办?谢谢

  • 问题内容: 在这种情况下,MAX仅为5,因此我可以一张一张地检查重复项,但是如何以更简单的方式进行检查呢?例如,如果MAX的值为20,该怎么办?谢谢。 问题答案: 最简单的方法是创建一个可能数字的列表(1..20或任何数字),然后用对其进行混洗。然后,只需考虑你想要的许多元素。如果你的范围最终等于你需要的元素数量(例如,用于洗牌的卡片),则这非常好。 如果你想要(说)1..10,000范围内的10

  • 本文向大家介绍C++生成不重复的随机整数,包括了C++生成不重复的随机整数的使用技巧和注意事项,需要的朋友参考一下 C++生成不重复的随机数,供大家参考,具体内容如下 给定正整数的范围[n,m],生成k个不重复的随机数字。 IDE是vs013。 运行结果: 这个程序可以用于班级内部按照学号进行随机抽签。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 新手,我正在制作一个程序,生成一个带有适当后缀的随机序数(即1、2、3…)我无法获得randomInt();工作。我不断收到以下错误: 我在Google和Stack Overflow上搜索了一个无济于事的解决方案。我甚至从互联网上复制和编译了其他使用随机Int()的程序;它们都产生了同样的错误。你能告诉我我做错了什么吗?这是我的程序代码: 欢迎对我的节目提出批评。谢谢

  • 问题内容: 我尝试使用,但一些数字相同。有没有一种方法/模块来创建唯一的随机数列表? 问题答案: 这将返回从0到99范围内选择的10个数字的列表,没有重复。 参考你的特定代码示例,你可能希望一次从文件中读取所有行,然后从内存中的已保存列表中选择随机行。例如: 这样,你只需要在循环之前实际从文件中读取一次即可。与返回文件开头并为每次循环迭代再次调用相比,执行此操作效率更高。

  • 问题内容: 作为我项目的一部分,我需要通过提供一组数字来创建不重复的2或3位数字随机数。我不想为此实现一个列表或数组,因为我应该为每个函数调用获取1个随机数。 我尝试使用Java的SecureRandom类来做到这一点。我也从某些站点获得了帮助,但是我陷入了困境,我们可以改组VALUES并完成它吗?但是我不知道该怎么办。谁能帮我? 问题答案: Fisher- yates随机播放算法 是必经之路。其