1

I am new to Java and am currently trying to create a program that will determine if the entered number is prime or composite. I've figured out most of it, but there's one part that has me stumped.

I want the code to print a message stating either "the number needs to be greater than 1" if a 0 or a negative number is entered, or "one is neither prime nor composite" if a 1 is entered.

Here's my code:

public class Main {

public static void main(String[] args) {
    
    int num;
    boolean prime = true;
    String answer;
    Scanner keyboard = new Scanner(System.in);
    
    do {
        
    System.out.print("Please enter a number ==> ");
    num = keyboard.nextInt();
    
    if (num < 1)
        System.out.println("The number entered needs to be greater than one.");
    else if (num == 1)
        System.out.println("One is neither a prime nor composite number.");
    else {
        for (int ii = 2; ii <= num/2; ii++) {
            if (num % ii == 0) {
                prime = false;
                break;
            }
        }
    }
    if (prime == true)
        System.out.println("The integer " + num + " is prime.");
    else {
        System.out.println("The integer " + num + " is composite.");
    }
    
    System.out.print("Would you like to go again? (yes/no) ");
    answer = keyboard.next();
    System.out.print("\n");
    } while (answer.equals("yes"));
}

}

My issue is that when I run the code and enter a 0, 1, or negative number, the code prints the correct message but adds "The integer "0, 1, -#" is prime."

I don't want it to do so, and only want it to print the corresponding message. What am I missing?

3 Answers3

1

Just move the print statements inside else to fix the logic.

Also, some more improvements are possible to exclude even numbers except 2, and look for the primes until a square root of num is achieved.

if (num < 1)
    System.out.println("The number entered needs to be greater than one.");
else if (num == 1)
    System.out.println("One is neither a prime nor composite number.");
else {
    prime = num % 2 == 1 || num == 2;
    for (int ii = 3; prime && ii * ii <= num; ii += 2) {
        if (num % ii == 0) {
            prime = false;
        }
    }
    if (prime)
        System.out.println("The integer " + num + " is prime.");
    else {
        System.out.println("The integer " + num + " is composite.");
    }
}
Nowhere Man
  • 19,170
  • 9
  • 17
  • 42
  • 1
    Thank you so much for commenting on this so quickly! It was such a simple fix - I don't know why I was struggling LOL! You guys are serious lifesavers! Thank you, thank you, thank you! After trying it out myself, I can say you were completely right and I am just so elated! – TheLegendTwentySeven Feb 03 '22 at 23:26
1

This code is executing no matter the value of num:

if (prime == true)
    System.out.println("The integer " + num + " is prime.");
else {
    System.out.println("The integer " + num + " is composite.");
}

To fix you can just move this inside the else statement

    if (num < 1)
        System.out.println("The number entered needs to be greater than one.");
    else if (num == 1)
        System.out.println("One is neither a prime nor composite number.");
    else {
        for (int ii = 2; ii <= num/2; ii++) {
            if (num % ii == 0) {
                prime = false;
                break;
            }
        }
        if (prime == true)
            System.out.println("The integer " + num + " is prime.");
        else {
            System.out.println("The integer " + num + " is    composite.");
        }
    }
oflint_
  • 297
  • 1
  • 8
0

The reason it is printing the statements is because the if piece of code will always run in case the value is less than 1 ( as you have already initialized prime boolean to be true ). A fix to this to to move the last if statement inside the else part.

public class Main {

    public static void main(String[] args) {

        int num;
        boolean prime = true;
        String answer;
        Scanner keyboard = new Scanner(System.in);

        do {

            System.out.print("Please enter a number ==> ");
            num = keyboard.nextInt();

            if (num < 1)
                System.out.println("The number entered needs to be greater than one.");
            else if (num == 1)
                System.out.println("One is neither a prime nor composite number.");
            else {
                for (int ii = 2; ii <= num / 2; ii++) {
                    if (num % ii == 0) {
                        prime = false;
                        break;
                    }
                }
                if (prime == true)
                    System.out.println("The integer " + num + " is prime.");
                else {
                    System.out.println("The integer " + num + " is composite.");
                }
            }

            System.out.print("Would you like to go again? (yes/no) ");
            answer = keyboard.next();
            System.out.print("\n");
        } while (answer.equals("yes"));
    }
}

then it does not give the additional print statement as earlier.

Please enter a number ==> 1
One is neither a prime nor composite number.
Would you like to go again? (yes/no)        
Gurkirat Singh Guliani
  • 1,009
  • 1
  • 4
  • 19