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

时间:2016-02-19 09:19:11

标签: java project

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

1 个答案:

答案 0 :(得分:1)

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

因此,对Integer的调用将失败,因为Javadoc状态:

  

抛出IndexOutOfBoundsException - 如果索引超出范围List.remove

您可以简单地写一下:

(index < 0 || index >= size())

(无需单独notPrime.remove(Integer.valueOf(dd)); 来电)

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

然而,这段代码的逻辑看起来更普遍。