【问题标题】:Beginner: Trying to run an sum/average class getting an error初学者:尝试运行总和/平均类得到错误
【发布时间】:2013-10-18 23:33:06
【问题描述】:

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

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

【问题讨论】:

    标签: java arrays sum average


    【解决方案1】:

    数组索引从0 开始,一直到length -1for 循环中查看&lt;=。所以这个for(x = 0; x &lt;= someNums.length; ++x)应该是for(x = 0; x &lt; someNums.length; ++x)

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        首先你应该从&lt;= someNums.length; 中删除= 我将看起来像这样&lt; someNums.length; 然后将++x 更改为x++ 如果你在循环开始时输入++x 它将检查条件&lt; someNums.length; 然后加上一个 +1x 等等,目前你的数组长度是 5 当循环进行最后一次增量时,它的大小是 6 并且有6 位置上没有项目,这就是它抛出异常的原因,所以你必须将其更改为 ++xx++

        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);
            }
        }
        

        【讨论】:

          【解决方案4】:

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

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

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

          希望对你有帮助

          【讨论】:

            【解决方案5】:
            1. 您想在x 小于someNums.length; 时进行迭代,因为数组中的最大索引为arraysLength - 1,因此在for 循环中将x &lt;= someNums.length; 更改为x &lt; someNums.length;
            2. 不需要tot(我假设它应该存储总数)变量,因为您已经有someNums.length,它表示您求和了多少个数字。顺便说一句,您已经使用sumsomeNums.length 计算avg。所以你可以安全地删除

              tot = someNums[x];
              

              来自您的代码。

            【讨论】:

              【解决方案6】:

              您所做的是循环超出了数组的范围。尝试做 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 &lt; someNums.length; x++)
              2. 你把循环改成for(int x = 0; x &lt;= someNums.length - 1; x++)

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2020-05-20
                • 2018-06-17
                • 2020-09-29
                • 1970-01-01
                • 1970-01-01
                • 2019-01-06
                • 1970-01-01
                相关资源
                最近更新 更多