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,但它仍然返回相同的错误。
任何想法?
这是我关于堆叠流量的第一篇文章,如果我以不正确的方式发帖,请纠正我
答案 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
。