Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用ArrayList查找素数_Java - Fatal编程技术网

如何在java中使用ArrayList查找素数

如何在java中使用ArrayList查找素数,java,Java,我一直在用java编写代码,我被困在这段代码中,我实现这段代码是为了寻找素数 public class PrimeList { ArrayList<Integer> list; public PrimeList(int n){ list = new ArrayList<Integer>(); preparePrimeList(n); } private void preparePrimeList(i

我一直在用java编写代码,我被困在这段代码中,我实现这段代码是为了寻找素数

public class PrimeList {

    ArrayList<Integer> list;

    public PrimeList(int n){

        list = new ArrayList<Integer>();

        preparePrimeList(n);
    }

    private void preparePrimeList(int n){
        int c =0;
        for (int i=0; i<=n; i++) {

            if (i%2!=0 && i%3!=0 && i%5!=0 && i%7!=0) {
                list.add(i);
                c++;
            }
        }

        list.remove(0);
        list.remove(1);
    }
    public void printPrimeList(){
        System.out.println(list);
    }
    public boolean isPrime(int nbr){

            if (list.contains(nbr)) {
                return true;
        }
        return false;
    }


    public static void main(String[] args) {

        PrimeList primes = new PrimeList(100);
        primes.printPrimeList();
        primes.isPrime(33);

    }

}
为什么输出错误?输出应如下所示:

2, 3, 4, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79,
83, 89, 97
false
我做错了什么


谢谢

那是因为
2,3,4,5,7
不符合您的条件
2%2==0
3%3==0
等等。您可以将条件更改为以下内容:

if ((i%2!=0 && i%3!=0 && i%5!=0 && i%7!=0) || i == 2 || i == 3 || i == 5 || i == 7){
    ....
} 

“从列表中删除”中的问题:

    list.remove(0);
    list.remove(1);

因此,您在这里所做的是删除第一个元素,即1,并删除第三个元素,该元素在删除第一个元素13之后成为第二个元素。问题是
i%2=0&&i%3=0&&i%5=0&&i%7=0
消除丢失的数字,即2,3,5,7,因为不符合该数字

此外,您正在删除列表中要统计的前两个数字,即1和13。(删除1后,11变为索引0)


但是,如果您的代码最多只能工作120次。之后,非素数开始出现在序列中。要计算所有小于或等于
n
的素数,您应该查看。

您的代码执行的正是您让它执行的操作。它从11点开始是因为你的主要支票有瑕疵。例如,2%2==0,因此程序认为2不是素数。3、5和7的情况类似。所以节目11点开始

您可以通过编写更精确的素数检查方法来避免这种情况,而不是只检查2、3、5或7的整除性。例如:

public boolean checkIfPrime(int num){
   for (int x = 2; x < (int)Math.sqrt(num); x++)
      if (num % x == 0)
          return false;
   return true;
}
public boolean checkIfPrime(int num){
对于(int x=2;x<(int)Math.sqrt(num);x++)
如果(num%x==0)
返回false;
返回true;
}
此外,在尝试从列表中删除第一个项目时,实际上删除了第一个和第三个项目(因为第三个位置2移动到了第二个位置1)。这就是为什么13在你的程序中被删除

替换list.remove(1)为list.remove(0)(因此您有两个)

希望这有帮助

Java8版本:

System.out.println(Integer.toString(2));
IntStream.iterate(3, i -> i + 2)
         .filter(potential -> IntStream.rangeClosed(3, (int)(Math.sqrt(potential)))
                                       .allMatch(n -> potential % n != 0))
         .forEach(prime -> System.out.println(Integer.toString(prime)));
试试这个

ArrayList <Integer> Primes= new ArrayList<>(0); 
Integer count=0;
Integer value=0;
Integer numberOfPrimes=100;
do {
    if(isPrime(value,Primes)) {
    Primes.add(value);
    count++;
}
value++;
}while(count<numberOfPrimes);
System.out.println(Primes.toString());

static boolean isPrime(Integer value, ArrayList <Integer> Primes) {     
if(value==0) {
    return false;
}       
for(int i=0;i<Primes.size() && Primes.get(i)< Math.sqrt(value);i++) {                   
    if(value%Primes.get(i)==0 && Primes.get(i)!=1) {
        return false;
    }           
}       
return true;            
}
arraylistprimes=新的ArrayList(0);
整数计数=0;
整数值=0;
整数numberOfPrimes=100;
做{
if(isPrime(值、素数)){
加(值);
计数++;
}
值++;
}而(count
import java.util.array;
导入java.util.List;
公共类素数测试{
公共静态void main(字符串[]args){
列表编号=数组.asList(1,2,3,4,5,6,7,8,9);
for(整数编号:数字){
if(isprime(num,numbers.size()){
系统输出打印项数(num);
}
}
}
私有静态布尔值isprime(int n,int length){

对于(int i=2;i)您的算法是错误的
i%2!=0&&i%3!=0&&i%5!=0&&i%7!=0
是检查素数的愚蠢方法。我应该怎么做?谢谢确定:您不应该在
2
开始迭代吗?
ArrayList <Integer> Primes= new ArrayList<>(0); 
Integer count=0;
Integer value=0;
Integer numberOfPrimes=100;
do {
    if(isPrime(value,Primes)) {
    Primes.add(value);
    count++;
}
value++;
}while(count<numberOfPrimes);
System.out.println(Primes.toString());

static boolean isPrime(Integer value, ArrayList <Integer> Primes) {     
if(value==0) {
    return false;
}       
for(int i=0;i<Primes.size() && Primes.get(i)< Math.sqrt(value);i++) {                   
    if(value%Primes.get(i)==0 && Primes.get(i)!=1) {
        return false;
    }           
}       
return true;            
}
import java.util.Arrays;
import java.util.List;

public class PrimeTest {

    public static void main(String[] args) {

        List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9);

        for(Integer num: numbers){

            if(isprime(num,numbers.size())){
                System.out.println(num);
            }
        }
    }

    private static boolean isprime(int n,int length) {

        for(int i=2; i<=length && i<=n ;i++){

            if(i<n && String.valueOf((float)n/(float)i).endsWith("0")){
                return false;
            }else if (n==i && n%i==0){
                return true;
            }
        }
        return false;
    }
}