有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java索引越界异常,即使大小小于索引?

我是Java编程新手,曾试图解决一些Project Euler的问题,但不知怎的在第一个问题上就卡住了

我试图找到从0到1000的数字范围内3和5的倍数之和

我的代码如下:

import java.util.ArrayList;

public class SumOfMultiplesOf3And5 {

    public static void main(String[] args) {

    int i = 0;
    int sum = 0;
    int n = 0;
    int totalforthree =0;
    int totalforfive = 0;
    int totalforall =0;
    ArrayList<Integer> multiples = new ArrayList<Integer>();
        for (i = 0; i < 1000; i++){
            if(i % 3 == 0){
                multiples.add(i);
                totalforthree += i;
                }
            else if(i % 5 == 0){
                multiples.add(i);
                totalforfive += i;
            }
        }
        while (n < multiples.size()){
            sum += multiples.get(i);
            System.out.println(sum);
        }
    totalforall = totalforthree + totalforfive;
    System.out.println("The sum is: " + totalforall);
        }

    }

我得到的误差如下:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1000, Size: 467
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at SumOfMultiplesOf3And5.main(SumOfMultiplesOf3And5.java:25)

我如何解决这个问题?尽管大小小于1000,但引发异常的原因是什么

如果这些问题太简单,我深表歉意,但我刚刚开始编程,因此我非常感谢能得到的任何帮助

提前非常感谢!:)


共 (1) 个答案

  1. # 1 楼答案

    我认为错误在这里:

    while (n < multiples.size()){
        sum += multiples.get(i);//Here
        System.out.println(sum); 
    }
    

    检查n是否小于大小,但在i处得到的数字可能小于大小,也可能不小于大小。您可以将其更改为:

    sum += multiples.get(n);