Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么要获取“ArrayIndexOutOfBoundsException:0”?_Java_Arrays_Indexoutofboundsexception - Fatal编程技术网

Java 为什么要获取“ArrayIndexOutOfBoundsException:0”?

Java 为什么要获取“ArrayIndexOutOfBoundsException:0”?,java,arrays,indexoutofboundsexception,Java,Arrays,Indexoutofboundsexception,当我试图在I位置将temp的值放入int[]unDupe时,问题似乎在for循环中。我得到一个错误: '主线程java.lang.ArrayIndexOutOfBoundsException中的异常:0 在main.main.mainMain.java:33' 在知道dupeSplit的大小后启动unDupe。您正在使用int[]unDupe={};-然而,这并没有给它任何元素;零大小的数组 只要你尝试用任何未更新的[i]=temp;您超出了数组大小-您的索引超出了范围。要使数组具有unDupe

当我试图在I位置将temp的值放入int[]unDupe时,问题似乎在for循环中。我得到一个错误:

'主线程java.lang.ArrayIndexOutOfBoundsException中的异常:0 在main.main.mainMain.java:33'


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

您正在使用int[]unDupe={};-然而,这并没有给它任何元素;零大小的数组

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


如果要取消复制输入,则重复数据消除阵列的大小最多必须与输入阵列dupeSplit的大小相同,因此可以声明int[]unDupe=new int[dupeSplit.length];在你知道dupeSplit的大小之后。稍后只需声明重复数据消除。

当您将unDupe初始化为{}时,将创建长度为0的重复数据消除。因此,当您尝试将元素放在索引0或更大的unDupe中时,您会得到一个越界异常,因为对于java中的数组,您只能将内容存储在索引0…长度-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;
    }
}
由于您将unDupe初始化为带有={}符号的空数组,所以无法写入其中的元素0,因为它根本没有可用内存

相反,尝试将unDupe的初始化放在拆分后,并替换为:

int[] unDupe = new int[dupeSplit.length];
这样做:

String[] dupeSplit = dupe.split(" ");
int[] unDupe = new int[dupeSplit.length];
现在unDupe有了一个初始大小

 int[] unDupe = {};
是由0个元素组成的数组。尝试访问unDupe[i],其中i=0->dupeSplit.length将导致引发越界异常。问问自己,如果尚未为数组中的索引分配空间,如何访问该索引?i、 e.unDupe[0]->错误,因为unDupe的大小为0。没有元素存在

您可能需要添加以下内容:

 int[] unDupe = new int[dupeSplit.length];
在这条线之后

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

您没有为数组分配任何元素。Java数组是固定长度的,一旦创建,就不能更改大小。如果不知道所需的最大长度,则需要在最坏的情况下分配数组,或者使用类似于非固定长度的ArrayList的内容。
 String[] dupeSplit = dupe.split(" ");