projectEuler 10 中的这段代码有什么问题?

what is wrong with this code in projectEuler 10?

我为 project Euler problem 10 编写了这段代码。但是在第 24 行它有一个错误。如何解决?

public static void main(String[] args) {
    int i;
    int b = 2000;
    List<Integer> notPrime = new ArrayList<Integer>();
    notPrime.add(2);
    notPrime.add(3);
    notPrime.add(5);
    notPrime.add(7);
    for (i = 2; i < b; i++) {
        if (i % 2 != 0 && i % 3 != 0 && i % 5 != 0 && i % 7 != 0) {
            notPrime.add(i);
        }
    }

    for(int primesNum:notPrime){
        int dd = (int) Math.pow(primesNum, 2);
        int indexofdd = Arrays.asList(notPrime).indexOf(dd); 
        //here is the error
        notPrime.remove(indexofdd);
    }
         int summy = notPrime.stream().mapToInt(Integer::intValue).sum();
         System.out.println(summy);
}

Arrays.asList(notPrime) 的类型是 List<List<Integer>>,这意味着 Arrays.asList(notPrime).indexOf(<some int>) 将始终为 -1(未找到),因为 List<List<Integer>> 不能包含 Integer.

因此对 List.remove 的调用将失败,因为正如 Javadoc 所述:

Throws IndexOutOfBoundsException - if the index is out of range (index < 0 || index >= size()).

你可以简单地写:

notPrime.remove(Integer.valueOf(dd));

(无需单独 indexOf 调用)

您需要 Integer.valueOf 以确保调用 List.remove(Object),而不是 List.remove(int):后者删除给定索引处的元素,而前者删除列表具有给定值的元素。

但是,这段代码的逻辑看起来更普遍。