Sagiri12105 2023-10-20 18:03 采纳率: 71.4%
浏览 5
已结题

Java程序实现数组元素打乱出错

Java程序实现数组中元素打乱的函数,运行后元素有重复,不知道哪里除了问题,求解答
打乱函数Disruption(int [] arr)代码如下:

  public static int [] Disruption(int [] arr){
        //打乱数组内的元素
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            int temp;
            temp = arr[r.nextInt(arr.length)];
            arr[r.nextInt(arr.length)] = arr [i];
            arr [i] =temp;
        }
        return arr;
    }

定义一个main函数调用并输出:

public static void main(String[] args) {
        int [] moneys = {9,666,188,520,99999};
        int [] moneys2 =Disruption(moneys);
        printArray(moneys2);//自写的将数组内容输出的函数
    }

最后的输出结果:

img

其中元素188重复。
我的打乱思路为,遍历整个数组,每到一个元素时,随机与另外一个位置上的元素交换数值
函数出现问题,望指教

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-20 20:38
    关注

    【以下回答由 GPT 生成】

    问题的根本原因是在交换元素时,随机选择的索引可能与当前索引重复,导致重复元素的出现。解决该问题可以采取以下方案:

    public static int[] Disruption(int[] arr) {
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            int randomIndex = r.nextInt(arr.length); // 随机选择一个索引
            int temp = arr[randomIndex]; // 保存被选择索引上的元素
            arr[randomIndex] = arr[i]; // 将当前元素放到被选择索引上
            arr[i] = temp; // 将被选择索引上保存的元素放到当前索引上
        }
        return arr;
    }
    

    这样,每次交换时,我们都首先随机选择一个不重复的索引,保证了元素不会被重复出现。

    用以上修改后的代码运行,并输出打乱后的数组,应该能够解决重复元素的问题了。

    public static void main(String[] args) {
        int[] moneys = {9, 666, 188, 520, 99999};
        int[] moneys2 = Disruption(moneys);
        printArray(moneys2);
    }
    

    输出结果应该是一个打乱顺序的数组,且没有重复元素。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月29日
  • 已采纳回答 10月21日
  • 创建了问题 10月20日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀