【发布时间】:2016-03-23 18:26:50
【问题描述】:
我正在尝试编写一个程序来检查它是否是素数,如果为真则返回一个字符串yes,如果为假则返回no。我试图在我的主要方法中只使用 while 循环来完成它,但我在执行它时遇到了问题。我在 void 方法中完成了它,并在我的 main 方法中调用了该方法,但这不是我想要的。
我希望它在我的 main 方法中,如果它是素数则返回一个字符串 yes,如果它不是素数则返回一个字符串 no。请问有什么想法吗?在下面的方法中查看我的代码。关于如何在我的 main 方法中将其转换为返回 yes 或 no 作为字符串的任何想法?
import java.util.Scanner;
public class PrimeNumbers {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter a number: ");
int number = in .nextInt();
isPrime(number);
}
public static void isPrime(int n) {
if (n % 2 == 0) {
System.out.println("It is not a prime number");
return;
} else {
int i = 3;
while (i <= Math.sqrt(n)) {
if ((n % i) == 0) {
System.out.println("It is not a prime number");
return;
}
i = i + 2;
}
}
System.out.println("It is a prime number");
return;
}
}
【问题讨论】:
-
如何将
isPrime()的正文复制到main()现在isPrime(number);所在的位置? (当然将n更改为number(反之亦然)。) -
你不能从 void 方法返回字符串。
-
您的 isPrime 方法不正确。任何小于或等于 1 的整数都不是素数。 2 & 3 是素数。 4 不是素数。正如您在 while 循环中所做的那样,可以测试任何大于等于 5 的整数。
-
由于 Math.sqrt(n) 很昂贵,因此您只需计算一次,而不是每次迭代。
标签: java while-loop primes