Java 为什么要获取“ArrayIndexOutOfBoundsException:0”?
当我试图在I位置将temp的值放入int[]unDupe时,问题似乎在for循环中。我得到一个错误: '主线程java.lang.ArrayIndexOutOfBoundsException中的异常:0 在main.main.mainMain.java:33'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
在知道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(" ");