0

当我上这门课时,我没有得到总和/平均值。我收到下面列出的错误。我不确定我为什么会得到它。我是一个非常新的学生。

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)"
4

6 回答 6

0

数组索引从开始0一直到它在你的循环中length -1 看到。所以这应该是<=forfor(x = 0; x <= someNums.length; ++x)for(x = 0; x < someNums.length; ++x)

于 2013-10-18T23:34:48.847 回答
0

问题是你的循环条件,像这样删除等号

for(x = 0; x < someNums.length; ++x)

您还应该将应该在循环内的代码包装到括号中(没有它们,只会执行 for 循环条件之后的下一行)

for(x = 0; x < someNums.length; ++x) {
  tot = someNums[x];
  sum = sum + someNums[x];
}
于 2013-10-18T23:34:57.007 回答
0

数组从零开始,它们的索引从0someNums.length -1

您不仅超出了数组的范围,而且变量sum被分配到了循环范围之外。调整数组的上限并添加大括号:

for (x = 0; x < someNums.length; x++) {
    tot = someNums[x];
    sum = sum + someNums[x];
}

希望这可以帮助

于 2013-10-18T23:35:29.347 回答
0
  1. 你想迭代 while xis less than someNums.length;since max index in array is arraysLength - 1,所以x <= someNums.length;改为x < someNums.length;in forloop
  2. 不需要tot(我假设它应该存储总数)变量,因为您已经拥有someNums.length代表您求和的数字的数量。顺便说一句,您已经在avg使用sumand进行计算someNums.length。这样您就可以安全地删除

    tot = someNums[x];
    

    从你的代码。

于 2013-10-18T23:39:52.990 回答
0

首先,您应该=<= someNums.length;i 中删除,看起来像这样< someNums.length; ,然后更改++x为,x++如果您++x在循环开始时放置,它将检查条件< someNums.length;,然后将+1加到x等等,当前您的数组长度为5,当循环最后一次增加其大小时是 6 并且6位置上没有项目,这就是它抛出异常的原因,所以你让你把它++x改成x++

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);
    }
}
于 2013-10-18T23:50:03.263 回答
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] 将不得不给您一个错误,因为您指向一个位置并试图从该位置检索基本上不存在的信息。

有两种方法可以解决您的问题:

  1. 您将循环更改为for(int x = 0; x < someNums.length; x++)
  2. 您将循环更改为for(int x = 0; x <= someNums.length - 1; x++)

这些将解决您的问题,因为它们将在 4 而不是在 5 停止循环,因此您将不再收到错误。

于 2015-09-12T13:54:55.333 回答