首页 > 解决方案 > Writing a program that determines a prime number

问题描述

I'm trying to write a program that asks the user to enter a number, then I need to create a method called isPrime to create the calculation and print out the result in main. I'm sure it's something small that I'm missing, but I can't get it to produce an accurate result.

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;
}

标签: java

解决方案


Use an if and else (don't retest your boolean condition in the first case). And don't test for == true in an if. This

if(isPrime(num) == true)
{
    System.out.println("Number is prime");
}
else if(isPrime(num) == false)
{
    System.out.println("Number is not prime");
}

Should just be

if (isPrime(num)) {
    System.out.println("Number is prime");
} else {
    System.out.pritnln("Number is not prime");
}

or even something like

System.out.print("Number is ");
if (!isPrime(num)) {
    System.out.print("not ");
}
System.out.println("prime");

If you want to put the braces on their own lines go ahead. As for your isPrime method; you have your return conditions reversed (and the test as well). Also we can optimize it a bit. Unroll the first even test, because then we can skip every other element. Also we only need to test to the square root of the input number. Like,

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;
}

推荐阅读