在 JAVA 中打印数组中的素数 [关闭]

问题描述 投票:0回答:3

我想创建一个程序,要求用户使用数组输入 5 个整数,并确定输入的所有质数。但我很难做到。似乎是什么问题?我为此使用 JCreator。

package arrays;

import java.util.Scanner;

public class Examples {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in) ;
        System.out.println("Total numbers : ");
        int n = sc.nextInt();
        boolean isPrime =true;
        int result =0;
        System.out.println("Enter the Numbers : ");
        int [] numbers = new int[n];
        
        for(int i=0;i<n;i++) {
            numbers[i]=sc.nextInt();
        }
        for(int i=0;i<n;i++) {
            for(int j=2;j*j<numbers[i];j++) {
                if(numbers[i]%j ==0) {
                    isPrime =false ;
                    break;  
                }
            }
        }
        if(isPrime) {
            System.out.println("The Prime Numbers : " +numbers[i]);
        }
    }

}
java arrays loops if-statement primes
3个回答
2
投票

你应该将

isPrime()
放在外循环内,如下所示 -

System.out.println("The Prime Numbers : ");
for(int i=0;i<n;i++) {
    isPrime =true;  // setting it to true before checking for every numbers
    for(int j=2;j*j<numbers[i];j++) {
        if(numbers[i]%j ==0) {
            isPrime =false ;  // will become false only when not an prime
            break;  
        }
    }
    // isPrime will remain true if numbers[i] is a prime number. So print the prime number
    if(isPrime) {
        System.out.println(numbers[i]+" ");
    }
}

你的代码几乎没有错误-

if(isPrime) {
    System.out.println("The Prime Numbers : " +numbers[i]);
}

首先,上面的代码是行不通的,因为

i
的范围仅限于
for()
循环。即使
i
是在 for 循环之外声明的,本应打印的数字也始终是最后一个数字(如果用户输入的数字中存在质数)。那不是我们想要的。

因此,只要验证数字不是质数,就打印数字。完成每个内部循环后,检查布尔值

isPrime
,如果为真,我们知道我们当前正在检查的数字(
numbers[i]
)肯定是素数。所以在那里打印数字本身。

希望这有帮助!


1
投票

以下代码片段修复了评论中提到的所有问题,并仅检查循环中的奇数是否为素数:

for (int num : numbers) {
    isPrime = num % 2 != 0 || num == 2;
    for (int j = 3; isPrime && j * j <= num; j += 2) {
        if (num % j == 0) {
           isPrime = false;
        }
    }
    if (isPrime && num > 1) {
        System.out.println("The Prime Number : " + num);
    }
}

你还应该考虑到 0 和 1 不是素数。


更优化的素数检查方法在 这个答案 中描述了一个类似的问题:Basic Java - Finding if a number is a prime number using while loop.


-1
投票

需要在外循环检查isPrime

   for(int i=0;i<n;i++) {  // This loops for every number
       //inner both loops for check the number is prime
        boolean isPrime =true;
        for(int j=2;j*j<numbers[i];j++) {
            if(numbers[i]%j ==0) {
                isPrime =false ;
                break;  
            }
        }
        if(isPrime) {
           System.out.println("The Prime Numbers : " +numbers[i]);
        }
    }
    
© www.soinside.com 2019 - 2024. All rights reserved.