“java.lang.ArrayIndexOutOfBoundsException:1”当数组的大小>指数

时间:2013-08-15 15:10:55

标签: java arrays indexing

public static int[] allBetween()
    {
        Scanner input = new Scanner(System.in);
        int first;
        int last;

        System.out.println("Enter the first number");
        first = input.nextInt();
        System.out.println("Enter the last number");
        last = input.nextInt();

        int[] between = {((last - first) + 1)};

        for(int count = 0; count <= (last - first); count++)
        {
            between[count] = (first + count);
        }

        return between;
    }

我有点生疏,我没有看到这里的问题,我尝试手动将数组的大小分配给100,第一个和最后一个为1和5,但它仍然返回相同的错误。

任何想法?

这是我关于堆叠流量的第一篇文章,如果我以不正确的方式发帖,请纠正我

4 个答案:

答案 0 :(得分:4)

以下声明:

int[] between = {((last - first) + 1)};

使用单个元素初始化数组,值为 - last - first + 1

将其更改为:

int size = last - first + 1;
int[] between = new int[size];

然后,您可以将循环更改为:

for(int count = 0; count < size; ++count)

答案 1 :(得分:3)

问题是:

int[] between = {((last - first) + 1)}; //initializes array with value

在索引0处此数组中只有一个值,如果last-first大于零,则最终会得到ArrayIndexOutOfBoundsException

阅读arrays tutorial了解详情。

答案 2 :(得分:3)

你应该替换

int[] between = {((last - first) + 1)};

int[] between = new int[((last - first) + 1)];

因为您的版本始终会创建一个长度为1的数组。请参阅此示例:

int[] foo = {22};

是长度为1的int[]foo[0]22。而

int[] bar = new int[33];

创建一个长度为33的数组,其中每个索引都存储默认值0

答案 3 :(得分:3)

这一行:

int[] between = {((last - first) + 1)};

创建一个包含单个元素的数组,其等于((last - first) + 1

使用:

int[] between = new int[(last-first)+1];

无论如何,要迭代它,你可以使用更好的更可读/惯用的结构:

for(int count = 0; count < between[length]; count++)
{
    between[count] = (first + count);
}

请记住,数组是通过括号进行寻址和标注的,使用大括号显式创建。

此外,between[count] = (first + count);看起来很可疑。确保这确实是您想要它做的,即将count的{​​{1}} th 元素设置为between。这只会使数组填充first+count