你能帮我解决我的问题吗?我需要为我的int数组添加值,但我得到的只是ArrayIndexOutOfBoundsException
。
public static void numberSort(){
int quantity = 0;
int[] values = new int[quantity];
int allocate = 0;
quantity = Integer.parseInt(JOptionPane.showInputDialog("How many values do you wish to sort? : "));
for(int x = 0; x <= values.length; x++){
allocate = Integer.parseInt(JOptionPane.showInputDialog("Values you want to sort : "));
values[allocate] = x;
System.out.println(values[x]);
}
答案 0 :(得分:2)
int quantity = 0;
int[] values = new int[quantity];
您正在分配一个带有0
位置的数组,这实际上是一个零长度数组。这意味着它确实没有任何有效位置,因此您无法在其中存储任何内容。这就是为什么当您尝试在数组中存储任何内容时,您会收到ArrayIndexOutOfBounds
异常。
您需要将<{1}}分配到行的行在您读取values
值的行之后。
您的下一个问题是quantity
循环:
for
数组索引从for(int x = 0; x <= values.length; x++)
到0
。因此,array.length - 1
循环的终止条件通常为for
。如果这是您的代码,您将不会看到此异常。但是,即使您修复此问题以使x < values.length
成为非零值,当您尝试填充数组时,您将获得异常,因为quantity
超出范围。因此,您必须将values[array.length]
循环更改为:
for
我还注意到你有for(int x = 0; x < values.length; x++)
。你想要的是values[allocate] = x;
,因为你想要数组的values[x] = allocate;
元素。
答案 1 :(得分:2)
此行是您的问题
int quantity = 0;
int[] values = new int[quantity];
您正在创建一个长度为0的数组。数组的长度是在创建数组时建立的。创建后,其长度是固定的。
在教程中阅读更多内容:Arrays
要快速修复代码,只需在数量
后启动数组int quantity = Integer.parseInt(JOptionPane.showInputDialog("How many values do you wish to sort? : "));
int[] values = new int[quantity];
for for loop change <=
to <
导致数组从0开始。
for(int x = 0; x < values.length; x++){
allocate = ...
values[x] = allocate; // you want to allocate in position "x" allocate
}
答案 2 :(得分:0)
除了创建0长度的数组之外,for循环结束条件不正确。你写了x <= values.length
,但你应该写x < values.length
。由于Java中的数组是0索引的,这意味着索引的有效范围是0到values.length - 1.
答案 3 :(得分:0)
我在那里算了三个错误。最重要的一个:
for(int x = 0; x <= values.length; x++){
Java数组索引从零开始 - 这意味着例如length
5
的数组具有索引0
,1
,2
,{{ 1}}和3
。在任一方向上超出该范围的任何内容都会产生4
。因为您使用ArrayIndexOutOfBoundsException
,所以您读取的值超出了允许范围。将其替换为<=
。
此外,您将数组初始化为大小为零。这意味着你无法真正使用它。只有<
具有正确的值,才能使用quantity
初始化数组!
最后,我相信你想quantity
,反之亦然。