TWayne-jpg
TWayne-jpg

Reputation: 11

how to end a while loop with a certain variable

I am making an odd or even program with a while loop. I am trying to figure out how to end the while loop with a certain number. Right now I have 1 to continue the loop, and trying to make 2 the number that terminates it. Also trying to figure out how to terminate the program if a user types anything but a number like a letter/words.

package oddoreven;
import java.util.Scanner;

public class oddoreven {
    public static void main (String[] args){            
        int num;
        int x = 1;
        while(x == 1) {
            System.out.println("Enter a number to check whether or not it is odd or even");
            Scanner s = new Scanner(System.in);
            num = s.nextInt();
            if (num % 2 == 0)
                System.out.println("The number is even");
            else 
                System.out.println("The number is odd");
            //trying to figure out how to get the code to terminate if you put in a value that isn't a number
            System.out.println("Type 1 to continue, 0 to terminate");
            x = s.nextInt();
        }

    }

}

Upvotes: 0

Views: 1819

Answers (4)

Yoshikage Kira
Yoshikage Kira

Reputation: 1121

Another thing you can try is that instead of exiting the program you can just keep asking user to enter correct input and only proceed if they do so. I don't know what is your requirement but if you want to go by good code practice then you shouldn't terminate your program just because user entered wrong input. Imagine if you googled a word with typo and google just shuts off.

Anyways here is how I did it


import java.util.Scanner;

public class oddoreven {
    public static void main(String[] args) {
        int num;
        int x = 1;
        while (x == 1) {
            System.out.println("Enter a number to check whether or not it is odd or even");
            Scanner s = new Scanner(System.in);

            boolean isInt = s.hasNextInt(); // Check if input is int
            while (isInt == false) { // If it is not int
                s.nextLine(); // Discarding the line with wrong input
                System.out.print("Please Enter correct input: "); // Asking user again
                isInt = s.hasNextInt(); // If this is true it exits the loop otherwise it loops again
            }
            num = s.nextInt(); // If it is int. It reads the input

            if (num % 2 == 0)
                System.out.println("The number is even");
            else
                System.out.println("The number is odd");
            // trying to figure out how to get the code to terminate if you put in a value
            // that isn't a number
            System.out.println("Type 1 to continue, 0 to terminate");
            x = s.nextInt();
        }

    }
}

Upvotes: 0

Nexevis
Nexevis

Reputation: 4667

I did not follow the conditions you wanted exactly because it does not make sense to have a continue condition AND a terminate condition unless there are other options.

What did you want the user to do if he entered 3, 4 or 5? Exit the code or continue the code? Well if the default is to exit, then you do not need the code to exit on 2 because it already will! If the default is to continue, then you do not need the continue on 1 and only the exit on 2. Thus it is pointless to do both in this case.

Here is the modified code to use a do while loop to ensure the loop is entered at least 1 time:

    int x;
    do {
        System.out.println("Enter a number to check whether or not it is odd or even");
        Scanner s = new Scanner(System.in);
        int num = s.nextInt();
        if (num % 2 == 0)
            System.out.println("The number is even");
        else 
            System.out.println("The number is odd");
        //trying to figure out how to get the code to terminate if you put in a value that isn't a number
        System.out.println("Type 1 to check another number, anything else to terminate.");

        if (!s.hasNextInt()) {
            break;
        }
        else {
            x = s.nextInt();
        }
    } while(x == 1);
   }

Note that I added a check to !s.hasNextInt() will check if the user enters anything other than an int, and will terminate without throwing an Exception in those cases by breaking from the loop (which is the same as terminating the program in this case).

If the x is a valid integer, then x is set to the value and then the loop condition checks if x is 1. If x is not 1 the loop terminates, if it is it will continue through the loop another time.

Upvotes: 1

umesh giri
umesh giri

Reputation: 198

To exit the program when the user enters anything other than a Number, change the variable x type to a String

if (!StringUtils.isNumeric(x)) {
    System.exit(0);
}

To exit the program when user enters 2

if (x == 2) {
    System.exit(0);
}

Upvotes: 0

user4695271
user4695271

Reputation:

You should try to use "a real termination condition" in order to terminate a while loop (or any loop for that matter); it's cleaner and should be easier to understand by everyone else.

In your case, I think it's better to have a do-while loop with some condition around this logic: num % 2 == 0, and an inner while loop for handling user input/validation.

If you still want to break loops abruptly, have a look here.

If you still need some help with the code, hit me up and I'll sketch up something.

Upvotes: 3

Related Questions