初学者:尝试运行一个sum / average类来获取错误

时间:2013-10-18 23:33:07

标签: java arrays sum average

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

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

6 个答案:

答案 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)

数组基于零,其索引从0someNums.length -1

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

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

希望这有帮助

答案 3 :(得分:0)

  1. 您希望在x小于someNums.length;时进行迭代,因为数组中的最大索引为arraysLength - 1,因此x <= someNums.length;中的x < someNums.length;更改为for循环
  2. 不需要tot(我认为它应该存储总数)变量,因为您已经有someNums.length表示您总和了多少个数字。顺便说一下,您已使用avgsum计算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]必须给你一个错误,因为你指向一个位置并试图从该位置检索基本上不存在的信息。

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

  1. 您将循环更改为for(int x = 0; x < someNums.length; x++)
  2. 您将循环更改为for(int x = 0; x <= someNums.length - 1; x++)
  3. 这些将解决您的问题,因为它们会使您的循环停在4而不是5,因此您将不再收到错误。