1

我写了那种代码

int[] count = new int[10];
int i = count.length;
int position = -1;
int num = kb.nextInt();

    while(i > 0)
    {
        if(count[i] == num)
        {
            position = i;
            break;
        }
         i--;
    }

但我得到了java.lang.ArrayIndexOutOfBoundsException错误

目的是找到用户在数组中选择的最后一次出现的数字。

4

7 回答 7

5

你设置i = count.length;。数组在 java 中从 0 开始索引,因此count[count.length]超出范围。数组中的最后一个有效索引aa.length -1

于 2013-06-27T11:57:12.950 回答
4

在您的第一次迭代中,您访问count[count.length].

数组是从零开始的,所以你应该初始化

int i = count.length-1;
于 2013-06-27T11:57:06.157 回答
4

这是错误的:

int i = count.length;
...
while(i > 0)
{
  if(count[i] == num)//count[count.length] is out of bound. Maximum index is count.length-1

尝试

int i = count.length-1;
...
while(i >= 0)
{
于 2013-06-27T11:57:30.720 回答
2

您的数组“count”的长度为 10。Java 数组从索引 0 开始。因此最后一个元素的长度为 1 = 9

你从 i = count.length = 10 开始。

count[10] 将抛出该异常。

快速解决您的问题:

int i = count.length - 1;
于 2013-06-27T12:02:12.177 回答
1
public class arra {
public static void main(String[] args) {
Scanner kb=new Scanner(System.in);
int[] count = new int[10];
int i = count.length-1;
int position = -1;
int num = kb.nextInt();

while(i > 0)
{
    if(count[i] == num)
    {
        position = i;
        break;
    }
     i--;
}
}
}
于 2013-06-27T12:03:24.607 回答
0

你的第一个i值是 10,这是你的数组的大小 +1 --> 导致 IndexOutOfBoundException 当你迭代时,总是将 1 减去你想要的值:要访问“第一个”值,选择索引 0,对于“最后一个”,索引为 9 ;)

于 2013-06-27T11:59:38.687 回答
0

这将是正确的:

 int[] count = new int[10];
    int i = count.length;
    int position = -1;
    int num = kb.nextInt();

    while(i > 0)
    {
        i--;
        System.out.println(i);
        if(count[i] == num)
        {
            position = i;
            break;
        }

    }

该数组由 10 个项目组成,从 0 开始,到 9 结束

于 2013-06-27T12:02:55.210 回答