为什么我的某些Java代码被忽略了?问题:java.lang.ArrayIndexOutOfBoundsException

时间:2019-02-23 11:56:53

标签: java algorithm

我的代码示例:

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 个答案:

答案 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 。插入它将被固定。