我的代码示例:
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)之后的代码被忽略了,我也不知道为什么。
答案 0 :(得分:0)
错误
该语句的最后一个逻辑错误。您在说:
if (numbers[x]+1 != numbers[x+1] )
数字长度为131071。说数字[x + 1]表示它将尝试比较131071 + 1 = 131072的位置超出范围。看到错误了吗?您在一开始就说过,您想要一个131071个职位的数组,然后尝试为131072nd个不存在的内容进行比较。
提示
您还必须替换以下内容:
System.out.println(numbers[element]);
与此:
System.out.println(element);
这就是为什么您使用这种for语句的原因。否则,您需要使用经典/默认值。
解决方案
您在if语句中缺少 +1
。插入它将被固定。