Printing Out Twice

我只是一个虾纸丫 提交于 2019-12-20 07:09:10

问题


I wrote a simple program for teaching purposes and everything works except for the part where it prints out the name and the answer to the computation you chose. The if-statement seems to executing twice, as if it were taking a step backwards before going forward.

It will print out the "Would you like to continue", but instead of prompting the user for a Y/N it will print out the answer to the computation AGAIN followed by the question of whether they would like to continue except the second time it will actually wait for input.

Thanks in advance.

Here's my code:

import java.util.Scanner;

public class Numbers
{
    public static void main(String[] args)
    {
        Scanner reader = new Scanner(System.in);

        boolean cont;
        String name, yorn;
        double num1, num2, answer;
        int choice, iterator = 0;

        System.out.print("What is your name? ");
        name = reader.nextLine();

        System.out.print("Please enter a number: ");
        num1 = reader.nextDouble();
        if(num1%2 != 0)
        {
            System.out.println(name + ", the number uou entered, " + num1 + ", is odd");
        }
        else
        {
            System.out.println(name + ", the number uou entered, " + num1 + ", is even");
        }

        System.out.print("Please enter a second number: ");
        num2 = reader.nextDouble();
        if(num2%2 != 0)
        {
            System.out.println(name + ", the second number  you entered, " + num2 + ", is odd");
        }
        else
        {
            System.out.println(name + ", the second number you entered, " + num2 + ", is even");
        }

        System.out.println("1. Add");
        System.out.println("2. Subtract");
        System.out.println("3. Multiply");
        System.out.println("4. Divide");
        System.out.print("Please enter the number for the operation you would like to perform on your numbers: ");
        choice = reader.nextInt();

        cont = true;
        while(cont)
        {

            while(choice != 1 && choice != 2 && choice != 3 && choice != 4)
            {
                System.out.print("The number entered is not one of the options. Please choose one of the operations: ");
                choice = reader.nextInt();
            }

            if(choice == 1)
            {
                answer = num1 + num2;
                System.out.println(name +" the sum of " + num1 + " and " + num2 + " is: " + answer);
            }
            else if(choice == 2)
            {
                answer = num1 - num2;
                System.out.println(name +" the difference between " + num1 + " and " + num2 + " is: " + answer);
            }
            else if(choice == 3)
            {
                answer = num1 * num2;
                System.out.println(name +" the product of " + num1 + " and " + num2 + " is: " + answer);
            }
            else //if(choice == 4)
            {
                answer = num1/num2;
                System.out.println(name +" the quotient of " + num1 + " and " + num2 + " is: " + answer);
            }


            System.out.print("Would you like to do anything else (Y/N)? ");
            yorn = reader.nextLine();

            if(yorn.equals("Y"))
            {
                System.out.println("1. Add");
                System.out.println("2. Subtract");
                System.out.println("3. Multiply");
                System.out.println("4. Divide");
                System.out.print("Please enter the number for the operation you would like to perform on your numbers: ");
                choice = reader.nextInt();

            }
            else if (yorn.equals("N"))
            {
                System.out.println("Thank you for using this prgram. Have a good day");
                cont = false;

            }
        }
    }
}

回答1:


The issue is the nextDouble() function. Yes, this reads a double, but it also reads the newline character (\n) into the buffer. So next time you call nextLine(), it is parsing the newline off right away instead of waiting for your input. Just call another reader.nextLine() before you ask for your input again, to clear the buffer of the newline char.




回答2:


As @adback03 said Scanner (obj).nextDouble() buffers "\n" and during nextLine() it reads from buffer; hence while loop continues

[Off Topic] I suggesst you to use switch-case

switch(choice) {
    case 1: System.out.println(num1 + num2); break;
    case 2: System.out.println(num1 - num2); break;
    case 3: System.out.println(num1 * num2); break;
    case 4: System.out.println(num1 / num2); break;
    default: System.out.println("Invalid choice");
}

Much easier to read :)



来源:https://stackoverflow.com/questions/20667635/printing-out-twice

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!