【问题标题】:Trying to add an arraylist尝试添加数组列表
【发布时间】:2013-12-14 18:17:15
【问题描述】:

我将 0 到 1000 之间的所有数字相加,它们是倍数或 3 和 5。我只是无法将它们相加。我不断收到错误消息:线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引:468,大小:468

我的代码

    //Multiple of 3 and 5 up to 1000
    int total = 0;
    int answer = 0;
    ArrayList<Integer> multof3 = new ArrayList<Integer>();
    for(int i =0; i <=1000; i++){

        if(i % 3 == 0 || i % 5==0){
            multof3.add(i);
            total++;

        }else{
            continue;
        }

    }

    System.out.println(multof3);
    System.out.println(total);

    //looping through array to get sum of elements
    for(int x =0; x <= multof3.size(); x++){
        answer= answer + multof3.get(x);
    }
    System.out.println(answer);

有人知道原因吗?我不明白为什么它不起作用。它打印出数组列表,所以我肯定应该将元素添加在一起......

【问题讨论】:

  • x &lt;= multof3.size() -> x &lt; multof3.size()
  • 附加信息您不需要使用“继续;”当你已经结束循环时

标签: java arraylist


【解决方案1】:

当循环遍历一个数组时,你必须记住它是从 0 开始索引的。

  for(int x =0; x < multof3.size(); x++){
    answer= answer + multof3.get(x);
  }

如果列表中有 468 项,则 size() 将返回 468,但最后一项在索引 467 处。使用增强的 for 循环可以帮助避免此类问题:

  for(Integer i: multof3){
       answer += i;
  }

【讨论】:

  • 哦,好的,我现在明白了。谢谢。
  • @Tloz,一旦你得到解决方案,点击左侧箭头按钮正下方的勾号就不会难接受答案:这就是 stackoverflow 的工作方式。事实上,我从您的个人资料中可以看出您不是通常的接受者,这可能会给回答者留下不好的印象,他们可能会避免回答您的问题,因为他们的大部分帮助都没有得到承认。
【解决方案2】:

for条件&lt;=更改为&lt;

for (int x = 0; x < multof3.size(); x++) {
    answer = answer + multof3.get(x);
}

记住索引从 0 开始。

【讨论】:

    【解决方案3】:

    您正在尝试访问 ArrayList 中最后一个元素之外的元素。改变

    for(int x =0; x &lt;= multof3.size(); x++){

    for(int x =0; x &lt; multof3.size(); x++){

    【讨论】:

      【解决方案4】:

      只使用&lt; 而不是&lt;=

      for(int x =0; x < multof3.size(); x++){
          answer= answer + multof3.get(x);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-14
        • 2019-03-12
        • 2021-10-05
        • 2012-02-20
        • 2023-03-05
        • 2021-11-27
        • 2021-10-21
        • 1970-01-01
        相关资源
        最近更新 更多