2016-02-28 76 views
2

任何人都可以告訴我下面的代碼有什麼問題嗎? 我想打印所有小於41的素數,但它也打印15,21不是素數。使用ArrayList打印素數

import java.util.*; 
import java.lang.*; 
import java.io.*; 
class Ideone 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     int x = 41; 
     List<Integer> lista = new ArrayList<Integer>(); 

     for (int i = 1; i<=x; i++){ 

      lista.add(i); 
     } 
     System.out.println(lista); 



     for (int i = 0; i<lista.size()-1; i++){ 
     if (!isPrime(lista.get(i))){ 
      lista.remove(lista.get(i)); 
      } 
     } 
     System.out.println(lista); 
    } 

    public static boolean isPrime(int x){ 
     boolean itIs = true; 
     for (int i = 2; i < x; i++){ 
      if(x%i == 0){ 
       itIs = false; 
      } 
     } 
     return itIs; 
    } 
} 

回答

3

當您從一個ArrayList中刪除元素,你改變的ArrayList其餘的指標,所以你的循環跳過一些數字。

一個可能的解決方法是從列表中移除元素之後遞減循環的計數器:

   for (int i = 0; i<lista.size()-1; i++){ 
        if (!isPrime(lista.get(i))){ 
         lista.remove(lista.get(i)); 
         i--; 
        } 
       } 

一個更好的解決辦法是找到素數添加到一個新的列表,同時保持原有的列表不變。

+0

與遞減counter.Thx – bluesony