如何从 Java 中的数组中找到所有素数

How can I find all prime numbers from array in Java

我想从数组中找到所有素数并在主程序中打印它们 class。

  public List<Integer> getListOfPrimes(int[] source) {
        List<Integer> result = new ArrayList<>();

        for (int i = 0; i < source.length; i++) {
            if (primeCheck(source[i] == true)
                result.add();
        }
        return result;
    }

    private boolean primeCheck(int value) {
        if (value < 2) return false;
        for (int i = 2; i <= value / 2; i++) if (value % i == 0) return false;
        return true;
    }
}

我有 int[] source = {2,4,5,8,13,22}

我想要 return 素数列表:2,5,13

您提供的代码示例对于该嵌套循环所需的任务而言似乎过于复杂。 当我过去查找算法来查找质数时,我遇到了 this sit 站点(请注意,有多个网站提供相同的代码)。

在你的情况下,我会创建一个接受 int[] 作为参数的静态方法,并在下面的示例中修改 n 变量以从数组中提取一个整数来测试它是否为质数。

public class PrimeExample{    
 public static void main(String args[]){    
  int i,m=0,flag=0;      
  int n=3;//it is the number to be checked    
  m=n/2;      
  if(n==0||n==1){  
   System.out.println(n+" is not prime number");      
  }else{  
   for(i=2;i<=m;i++){      
    if(n%i==0){      
     System.out.println(n+" is not prime number");      
     flag=1;      
     break;      
    }      
   }      
   if(flag==0)  { System.out.println(n+" is prime number"); }  
  }//end of else  
}    
}   

你的代码做了它应该做的,但有点令人困惑。

作为一项改进,您可以将 prim 检查包装在一个函数中,使其余代码更易于阅读:

private boolean primeCheck(int value){
    if(value < 2) return false;
    for(int i = 2; i <= value / 2; i++) if(value % i == 0) return false;
    return true;
}

然后可以逐个输出质数,如您的示例:

System.out.print("Prime Numbers: ");
for(int i = 0; i < array1.length; i++) {
    if(primeCheck(array1[i])) System.out.print(array1[i] + ", ");
}
System.out.println("");

或者通过将质数打包成一个列表作为一个整体:

List<Integer> result = new ArrayList<>();

for(int i = 0; i < array1.length; i++) {
    if(primeCheck(array1[i])) result.add(array1[i]);
}
System.out.println("Prime Numbers: " + Arrays.toString(result.toArray()));

一个功能齐全的测试项目:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        new Main(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17 });
    }

    public Main(int[] array1) {
        List<Integer> result = new ArrayList<>();

        for(int i = 0; i < array1.length; i++) {
            if(primeCheck(array1[i])) result.add(array1[i]);
        }
        System.out.println("Prime Numbers: " + Arrays.toString(result.toArray()));
    }

    private boolean primeCheck(int value){
        if(value < 2) return false;
        for(int i = 2; i <= value / 2; i++) if(value % i == 0) return false;
        return true;
    }
}

修改示例returns结果为List<Integer>.

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        List<Integer> result = main.getListOfPrimes(new int[] { 1, 2, 3, 4, 5, 6 });

        // Print array from list
        System.out.println("Prime Numbers: " + Arrays.toString(result.toArray()));

        // Iterate list
        for(int i: result) 
            System.out.println(i);
    }

    public List<Integer> getListOfPrimes(int[] source) {
        List<Integer> result = new ArrayList<>();

        for(int i = 0; i < source.length; i++) {
            if(primeCheck(source[i])) result.add(source[i]);
        }
        return result;
    }

    private boolean primeCheck(int value){
        if(value < 2) return false;
        for(int i = 2; i <= value / 2; i++) if(value % i == 0) return false;
        return true;
    }
}