[英]Printing prime numbers with ArrayList
谁能告诉我下面的代码怎么了? 我想打印所有小于41的质数,但也打印非质数15、21。
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;
}
}
从ArrayList中删除元素时,将更改其余ArrayList的索引,因此循环将跳过一些数字。
一种可能的解决方法是从List中删除一个元素后减少循环的计数器:
for (int i = 0; i<lista.size()-1; i++){
if (!isPrime(lista.get(i))){
lista.remove(lista.get(i));
i--;
}
}
更好的解决方案是将找到的素数添加到新列表中,同时保持原始列表不变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.