当我尝试将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
}
}
答案 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有一个初始大小。