2014-10-08 77 views
-1

当我试图将temp的值放入int[] unDupei位置时,问题似乎在我的for循环内。我得到的错误:为什么我会收到“ArrayIndexOutOfBoundsException:0”?

'Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at 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 
    } 
} 
+0

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

你没有分配的数组的任何元素。 – OldProgrammer 2014-10-08 20:41:20

+0

Java数组的长度固定,创建后不能更改大小。如果你不知道你需要的最大长度,你可能需要为“最糟糕的情况”分配数组,或者使用类似ArrayList的非固定长度的东西。 – 2014-10-08 20:45:51

回答

4

您正在使用int[] unDupe = {};声明并初始化unDupe数组 - 但是,它没有给出元素;一个零大小的数组。

只要你尝试用任何东西索引它unDupe[i] = temp;你超出了数组的大小 - 你的索引超出范围。对于一个数组,甚至有unDupe[0]该数组必须至少size = 1。

如果您未重复你的重复数据删除阵列必须输入,最多,同样大小的输入数组dupeSplit,所以你可以声明int[] unDupe = new int[dupeSplit.length];你知道dupeSplit后的大小。稍后再声明deDupe。

0

启动unDupe你知道dupeSplit后的大小。

-1

使用

int[] unDupe = new int[100]; 

你可以用你的数组中需要但是很多东西取代百试。

+0

-1他确切知道他需要多少,即dupeSplit.length。 – MrHug 2014-10-08 20:45:19

2

当您将unDupe初始化为{}时,您创建的长度为0。因此,当您尝试将元素放在索引0(或更高)的unDupe中时,会出现越界异常,因为对于数组(在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; 
    } 
} 
1

由于您初始化unDupe为空数组与={}符号不能写入到它元素0(它没有存储器可用的话)。

而是试图把的unDupe初始化拆分后,取而代之的是:

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

这样做:

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

现在unDupe的初始大小。

1
int[] unDupe = {}; 

是一个0元素的数组。尝试访问其中i = 0-> dupeSplit.length的unDupe [i]将导致抛出异常异常。如果没有空间分配给自己,问自己如何访问数组中的索引?即unDupe [0] - > ERROR,因为unDupe的大小是0.没有元素存在!

你可能想补充一点:这条线

String[] dupeSplit = dupe.split(" "); 
相关问题