2
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

4 回答 4

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)
于 2013-08-15T15:12:56.467 回答
3

问题是:

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

您在该数组中只有一个值位于索引 0 处,如果last-first大于零,您最终将拥有ArrayIndexOutOfBoundsException.

阅读数组教程以获取更多信息。

于 2013-08-15T15:12:37.257 回答
3

你应该更换

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

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

因为您的版本总是创建一个长度为 1 的数组。例如,请参见:

int[] foo = {22};

是一个int[]长度为 1 并且foo[0]22. 然而

int[] bar = new int[33];

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

于 2013-08-15T15:12:56.590 回答
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);看起来很可疑。确保这确实是您想要它做的事情,即将countth的元素设置betweenfirst+count。那只会使数组充满first, first+1, ....

于 2013-08-15T15:13:09.240 回答