我想创建一个程序,要求用户使用数组输入 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]);
}
}
}
你应该将
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]
)肯定是素数。所以在那里打印数字本身。
希望这有帮助!
以下代码片段修复了评论中提到的所有问题,并仅检查循环中的奇数是否为素数:
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.
需要在外循环检查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]);
}
}