You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何多次生成随机数并查找其在指定数组中的位置?

问题分析与解决方案

咱们先拆解下你遇到的问题:当把随机数k的生成逻辑放进循环重复执行时,在if (arr[i] == k)处报错,大概率是数组索引越界或者类型匹配的隐含隐患导致的,咱们一步步来梳理解决:

核心问题排查

  • 数组索引越界的坑:你原来的代码里,第一次查找后i的值会停在找到的位置或者数组末尾。如果把k的生成放进循环后,没有每次重置i为0,那么下一次循环时i已经等于arr.length(也就是1000000),此时访问arr[i]就会抛出ArrayIndexOutOfBoundsException——这是最常见的触发报错的原因。
  • 类型不匹配的隐患:你的k是double类型,而数组元素是int类型。虽然你用了(int)(Math.random()*1000001)把随机数转成整数再转成double,比较时arr[i]会自动转成double看似没问题,但如果后续代码改动(比如去掉外层的(int)),就会出现精度问题,更规范的做法是把k直接定义为int类型。

修正后的完整代码

public class Feld {
    public static void main(String[] args) {
        int n = 1000001; // 要存0-1000000,数组长度得设为1000001
        int arr[] = new int[n];
        // 填充0到1000000的数值
        for(int i = 0; i < n; i++){
            arr[i] = i;
        }

        // 指定重复查找的次数,比如测试10次
        int repeatTimes = 10;
        for(int round = 0; round < repeatTimes; round++){
            // 直接生成int类型的随机数,范围0-1000000
            int k = (int)(Math.random() * 1000001);
            boolean found = false;
            int i = 0; // 每次循环必须重置i为0!
            while (i < arr.length) {
                if (arr[i] == k) {
                    found = true;
                    break;
                }
                i++;
            }
            // 输出位置:数组索引从0开始,所以实际位置是i+1
            if (found) {
                System.out.println("随机数" + k + "的位置是:" + (i + 1));
            } else {
                System.out.println("随机数" + k + "未找到,输出:" + (arr.length + 1));
            }
        }
    }
}

关键改动说明

  • 调整数组长度:原代码数组长度是1000000,只能存0到999999,不符合你“填充0-1000000”的需求,所以改成n=1000001。
  • 每次循环重置索引i:在每次生成新的k后,必须把i重新设为0,否则会从上次结束的位置继续遍历,直接触发索引越界。
  • 统一类型为int:把k改成int类型,避免double和int比较的潜在问题,代码逻辑更清晰。
  • 增加循环次数控制:用repeatTimes指定重复查找的次数,方便你灵活调整测试次数。

额外优化建议

因为你的数组是有序的连续整数,完全可以不用遍历查找,直接通过k的值计算位置,效率会高很多:

// 替代while循环的优化写法
if(k >=0 && k <=1000000){
    System.out.println("随机数" + k + "的位置是:" + (k + 1));
}else{
    System.out.println("随机数" + k + "未找到,输出:" + (arr.length + 1));
}

内容的提问来源于stack exchange,提问作者M. Eichhorn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:27:51