为什么我得到“ArrayIndexOutOfBoundsException:0”?

时间:2014-10-08 20:39:24

标签: java arrays indexoutofboundsexception

当我尝试将for的值放入temp int[] unDupe位置时,问题似乎在我的i循环中。我收到错误:

  

'线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:0       在main.Main.main(Main.java:33)'

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int[] unDupe = {};
    System.out.print("Enter a number sequence (eg. '1 2 10 20'): ");
    String dupe = input.nextLine();
    String[] dupeSplit = dupe.split(" ");

    int temp;
    for(int i = 0; i < dupeSplit.length; i++){
        temp = Integer.parseInt(dupeSplit[i]);
        unDupe[i] = temp; // line 33
    }
}

6 个答案:

答案 0 :(得分:4)

您正在使用int[] unDupe = {};声明并初始化unDupe数组 - 但是这不会给它带来任何元素;一个零大小的数组。

只要您尝试使用任何unDupe[i] = temp;索引它就超出了数组大小 - 您的索引超出范围。对于甚至具有unDupe[0]的数组,数组必须至少为size = 1.

如果您要删除deDupe数组必须的输入,最多,与输入数组dupeSplit的大小相同,因此您可以声明int[] unDupe = new int[dupeSplit.length];在你知道了dupeSplit的大小之后。稍后再宣布deDupe。

答案 1 :(得分:2)

将unDupe初始化为{}时,您创建的长度为0。因此,当您尝试将元素放在unDupe中的索引0(或更高)时,您会得到一个越界异常,因为对于一个数组(在java中),您只能将事物存储在索引0...(length - 1)中。通过在数字序列的大小后初始化unDupe来解决此问题。

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    System.out.print("Enter a number sequence (eg. '1 2 10 20'): ");
    String dupe = input.nextLine();
    String[] dupeSplit = dupe.split(" ");
    int[] unDupe = new int[dupeSplit.length];

    int temp;
    for(int i = 0; i < dupeSplit.length; i++){
        temp = Integer.parseInt(dupeSplit[i]);
        unDupe[i] = temp;
    }
}

答案 2 :(得分:1)

由于您使用unDupe表示法初始化={}为空数组,因此无法写入其中的元素0(它根本没有可用内存)。

而是尝试在拆分后初始化unDupe并将其替换为:

int[] unDupe = new int[dupeSplit.length];

答案 3 :(得分:1)

 int[] unDupe = {};

是一个包含0个元素的数组。试图访问unDupe [i],其中i = 0-&gt; dupeSplit.length将导致抛出越界异常。问问自己,如果没有为其分配空间,您如何访问数组中的索引?即unDupe [0] - &gt;错误,因为unDupe的大小为0.没有元素存在!

您可能想要添加此内容:

 int[] unDupe = new int[dupeSplit.length];

这一行之后

 String[] dupeSplit = dupe.split(" ");

答案 4 :(得分:0)

在知道了dupeSplit的大小后启动unDupe。

答案 5 :(得分:0)

这样做:

String[] dupeSplit = dupe.split(" ");
int[] unDupe = new int[dupeSplit.length];

现在unDupe有一个初始大小。