为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的一些 Java 代码被忽略了?

为什么我的一些 Java 代码被忽略了?

白衣非少年 2022-07-06 17:16:49
我的代码示例:public class arrray_2{    public static void main(String[] args) {        populateArray();    }    public static void populateArray(){        int [] numbers = new int [131071];        HashSet<Integer> used = new HashSet<Integer>();        for (int i = 0; i < 131071; i++) {                int num = (int)(Math.random() * 131072 );                 while (used.contains(num)) {                     num = (int) (Math.random() * 131072 );                 }                used.add(num);                numbers[i] = num;}        Arrays.sort(numbers);        for (int element : numbers) {            System.out.println(numbers[element]);        }        for (int x = 0; x < numbers.length; x++) {            if (numbers[x]+1 != numbers[x+1] ) {                System.out.println("Missing Number is: "+numbers[x]);            }        }        System.out.println("hi");        }    }通过执行这个我想出了这个错误:java.lang.ArrayIndexOutOfBoundsException这是我正在使用的代码,出于某种原因, for (int : element) 之后的代码被忽略了,我不知道为什么。
查看完整描述

1 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

错误

您对语句的最后一个逻辑错误。你是说:

if (numbers[x]+1 != numbers[x+1] )

数字长度为 131071。通过说 numbers[x+1] 意味着它将尝试比较 131071+1 = 131072 的位置超出范围。你看到错误了吗?您在开始时说过您想要一个包含 131071 个位置的数组,并且您尝试比较第 131072 个不存在的东西。

小费

您还必须替换这个:

System.out.println(numbers[element]);

有了这个:

System.out.println(element);

这就是你使用这种 for 语句的原因。否则,您需要使用经典/默认的。

解决方案

您的 if 语句中缺少 a +1。插入它,它将被固定。


查看完整回答
反对 回复 2022-07-06
  • 1 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号