当我上课时,我没有得到总和/平均值。我收到下面列出的错误。我不知道为什么我会得到它。我是一名非常新的学生。
public class DebugEight2
{
public static void main(String[] args)
{
int[] someNums = {4,17,22,8,35};
int tot;
int x;
int sum = 0;
for(x = 0; x <= someNums.length; ++x)
tot = someNums[x];
sum = sum + someNums[x];
System.out.println("Sum is " + sum);
System.out.println("Average is " + sum * 1.0 / someNums.length);
}
}
"Exception in thread "main" java.lang.ArrayIndexOutofBoundsException: 4 at DebugEight1.main (DebugEight1.java:17)"
答案 0 :(得分:0)
数组索引从0
开始,一直到length -1
在<=
循环中看到for
。因此for(x = 0; x <= someNums.length; ++x)
应为for(x = 0; x < someNums.length; ++x)
答案 1 :(得分:0)
问题是你的循环条件,删除像这样的等号
for(x = 0; x < someNums.length; ++x)
你还应该把应该在循环中的代码包装成括号(没有它们,只有执行for循环条件后的下一行)
for(x = 0; x < someNums.length; ++x) {
tot = someNums[x];
sum = sum + someNums[x];
}
答案 2 :(得分:0)
数组基于零,其索引从0
到someNums.length -1
您不仅要超出数组的范围,还要在循环范围之外分配变量sum
。调整数组的上限并添加大括号:
for (x = 0; x < someNums.length; x++) {
tot = someNums[x];
sum = sum + someNums[x];
}
希望这有帮助
答案 3 :(得分:0)
x
小于someNums.length;
时进行迭代,因为数组中的最大索引为arraysLength - 1
,因此x <= someNums.length;
中的x < someNums.length;
更改为for
循环不需要tot
(我认为它应该存储总数)变量,因为您已经有someNums.length
表示您总和了多少个数字。顺便说一下,您已使用avg
和sum
计算someNums.length
。所以你可以安全地删除
tot = someNums[x];
答案 4 :(得分:0)
首先,您应该从=
移除<= someNums.length;
我将看起来像这样< someNums.length;
,然后如果您放置++x
,则将x++
更改为++x
当循环开始时,它将检查条件< someNums.length;
,然后将 +1 加到 x ,依此类推,目前您的数组长度 5 当循环继续上一次增量时,它的大小为6,并且 6 位置上没有项目,这就是为什么它会抛出异常所以你要将它++x
更改为x++
< / p>
public class DebugEight2
{
public static void main(String[] args)
{
int[] someNums = {4,17,22,8,35};
int tot;
int x;
int sum = 0;
for(x = 0; x <someNums.length; x++) /// just change here
tot = someNums[x];
sum = sum + someNums[x];
System.out.println("Sum is " + sum);
System.out.println("Average is " + sum * 1.0 / someNums.length);
}
}
答案 5 :(得分:0)
你做的是你超越了数组的范围。尝试做someNums.length,你会得到5号。
转到你的for循环,我们现在知道它从0开始并递增,直到它变为5.并且for循环遍历数组并指向数组中的位置。
让我们遍历你的循环。
在x = 0时,someNums [x] = 4。
在x = 1时,someNums [x] = 17,
在x = 2时,someNums [x] = 22,
在x = 3时,someNums [x] = 8,
在x = 4时,someNums [x] = 35,
如您所见,您的数组现已结束,您不再需要遍历任何元素。但是我们之前曾说过你的for循环递增,直到达到5。
所以在x = 5时,someNums [x]必须给你一个错误,因为你指向一个位置并试图从该位置检索基本上不存在的信息。
有两种方法可以解决您的问题:
for(int x = 0; x < someNums.length; x++)
for(int x = 0; x <= someNums.length - 1; x++)
这些将解决您的问题,因为它们会使您的循环停在4而不是5,因此您将不再收到错误。