我正在尝试编写一个要求用户输入数字的程序,然后我需要创建一个名为isPrime
的方法来创建计算并在main中打印出结果。我确定这是我所缺少的小东西,但是我无法获得准确的结果。
public static void main(String[] args) {
System.out.print("Enter number: ");
int num = s.nextInt();
if (isPrime(num) == true) {
System.out.println("Number is prime");
} else if (isPrime(num) == false) {
System.out.println("Number is not prime");
}
}
public static boolean isPrime(int num){
for(int i = 2; i <= num/2; i++) {
if (num%i != 0) {
return true;
}
}
return false;
}
答案 0 :(得分:2)
使用if
和else
(在第一种情况下,请勿重新测试布尔条件)。并且不要在== true
中测试if
。这个
if(isPrime(num) == true)
{
System.out.println("Number is prime");
}
else if(isPrime(num) == false)
{
System.out.println("Number is not prime");
}
应该是
if (isPrime(num)) {
System.out.println("Number is prime");
} else {
System.out.pritnln("Number is not prime");
}
或甚至类似
System.out.print("Number is ");
if (!isPrime(num)) {
System.out.print("not ");
}
System.out.println("prime");
如果您想将大括号放在自己的行上,请继续。至于您的isPrime
方法;您的退货条件发生了逆转(测试也是如此)。我们也可以对其进行优化。展开第一个偶数测试,因为这样我们就可以跳过所有其他元素。同样,我们只需要测试输入数字的平方根即可。喜欢,
public static boolean isPrime(int num) {
if (num == 2) {
return true; // two is prime.
}
if (num < 1 || num % 2 == 0) {
return false; // all other even numbers are not prime.
}
for(int i = 3; i <= Math.sqrt(num); i += 2) {
if (num % i == 0) {
return false;
}
}
return true;
}
答案 1 :(得分:0)
您应将“ if(num%i!= 0)”条件更改为if(num%i == 0)
请参见以下代码:
public class Prime {
public static void main(String[] args) {
int num = 29;
boolean flag = false;
for(int i = 2; i <= num/2; ++i)
{
// condition for nonprime number
if(num % i == 0)
{
flag = true;
break;
}
}
if (!flag)
System.out.println(num + " is a prime number.");
else
System.out.println(num + " is not a prime number.");
}
}
答案 2 :(得分:0)
isPrime(int num)方法可能需要检查是否num % i == 0
而不是num % i != 0
,因为许多非质数会通过条件并返回true。
例如,如果调用isPrime(9)
,则条件语句将检查9%2!= 0是否为真,并且该方法将在9不为9时表示质数。
因此,您可以尝试将方法更改为如下所示:
public static boolean isPrime(int num)
{
for(int i = 2; i <= num/2; i++)
{
if (num%i==0)
{
return false;
}
}
return true;
}