首页 > 解决方案 > 在 JAVA 中打印数组中的素数

问题描述

我想创建一个程序,要求用户使用数组输入 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]);
        }
    }

}

标签: javaarraysloopsif-statementwhile-loop

解决方案


你应该把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])肯定是素数。所以打印数字本身。

希望这可以帮助 !


推荐阅读