【问题标题】:To print prime numbers from the array in JAVA [closed]在 JAVA 中从数组中打印素数 [关闭]
【发布时间】:2020-10-17 10:11:12
【问题描述】:

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

}

【问题讨论】:

  • 似乎是什么问题?您能否编辑您的问题,详细说明您的代码如何不起作用?
  • 顺便说一句,我建议将if (isPrime) 部分放在第二个 for 循环(外部循环)中。缓存素数也不会受到伤害
  • 您输入了多个数字,但您只有一个 isPrime 值
  • System.out.println("The Prime Numbers : " +numbers[i]); 这一行有问题 -- i 超出范围
  • 请阅读minimal reproducible example并完善您的问题

标签: java arrays loops if-statement while-loop


【解决方案1】:

以下代码 sn-p 修复了所有问题,并且只检查循环中的奇数:

    for (int i = 0; i < n; i++) {
        isPrime = numbers[i] % 2 == 1;
        for (int j = 3; isPrime && j * j <= numbers[i]; j += 2) {
            if (numbers[i] % j == 0) {
               isPrime = false;
            }
        }
        if (isPrime && numbers[i] > 1) {
            System.out.println("The Prime Numbers : " + numbers[i]);
        }
    }

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

【讨论】:

  • 零解释,只为他做功课。这不是你帮助想要学习编程的人的方式。为他们解决所有问题会减慢他们的学习速度。还是您学习编程是因为其他人为您努力工作?
  • @GhostCat 这里需要哪些解释?? OP 几乎完成了他的工作并犯了一些我在 cmets 中指出的小错误。这个答案只是提供了一个优化来跳过偶数并且不把 0 算作素数
【解决方案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])肯定是质数。所以打印数字本身。

希望这会有所帮助!

【讨论】:

    【解决方案3】:

    你需要在外循环中检查 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]);
            }
        }
        
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      相关资源
      最近更新 更多