简体   繁体   中英

Hanging token from user input is not allowing me to proceed in my program

My program is not allowing me to enter user input if i do not enter a number and i want to go through the program again, it think its due to a hanging token somewhere but i cannot seem to find it.

import java.util.Scanner;

public class LessonTwo {
    static Scanner userInput = new Scanner(System.in);
    public static void main(String[] args) {
        char answer = ' ';
        do {
            System.out.print("Your favorite number: "); 
            if (userInput.hasNextInt()) {
                int numberEntered = userInput.nextInt();
                userInput.nextLine();

                System.out.println("You entered " + numberEntered);

                int numEnteredTimes2 = numberEntered + numberEntered;
                System.out.println(numberEntered + " + " + numberEntered
                        + " = " + numEnteredTimes2);

                int numEnteredMinus2 = numberEntered - 2;
                System.out.println(numberEntered + " - 2 " + " = "
                        + numEnteredMinus2);

                int numEnteredTimesSelf = numberEntered * numberEntered;
                System.out.println(numberEntered + " * " + numberEntered
                        + " = " + numEnteredTimesSelf);

                double numEnteredDivide2 = (double) numberEntered / 2;
                System.out.println(numberEntered + " / 2 " + " = "
                        + numEnteredDivide2);

                int numEnteredRemainder = numberEntered % 2;
                System.out.println(numberEntered + " % 2 " + " = "
                        + numEnteredRemainder);

                numberEntered += 2; // *= /= %= Also work
                numberEntered -= 2;

                numberEntered++;
                numberEntered--;

                int numEnteredABS = Math.abs(numberEntered); // Returns the
                int whichIsBigger = Math.max(5, 7);
                int whichIsSmaller = Math.min(5, 7);

                double numSqrt = Math.sqrt(5.23);

                int numCeiling = (int) Math.ceil(5.23);
                System.out.println("Ceiling: " + numCeiling);

                int numFloor = (int) Math.floor(5.23);
                System.out.println("Floor: " + numFloor);

                int numRound = (int) Math.round(5.23);
                System.out.println("Rounded: " + numRound);

                int randomNumber = (int) (Math.random() * 10);
                System.out.println("A random number " + randomNumber);

            } else {
                System.out.println("Sorry you must enter an integer");
            }
            System.out.print("Would you like to try again? ");

            answer = userInput.next().charAt(0);

        }while(Character.toUpperCase(answer) == 'Y');
        System.exit(0);
    }
}

Yes you are right you need to consume the characters first after the user inputted character in the nextInt before allowing the user to input data again

just add this in your else block and it will work:

    else {
        System.out.println("Sorry you must enter an integer");
        userInput.nextLine(); //will consume the character that was inputted in the `nextInt`

    }

EDIT:

change this:

answer = userInput.next().charAt(0);

to:

answer = userInput.nextLine().charAt(0);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM