简体   繁体   English

两次打印

[英]Printing Out Twice

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. if语句似乎执行了两次,好像它在前进之前向后退了一步。

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;

            }
        }
    }
}

The issue is the nextDouble() function. 问题是nextDouble()函数。 Yes, this reads a double, but it also reads the newline character ( \\n ) into the buffer. 是的,这将读取一个double,但也会将换行符( \\n )读取到缓冲区中。 So next time you call nextLine() , it is parsing the newline off right away instead of waiting for your input. 因此,下次调用nextLine() ,它将立即解析换行符,而不是等待输入。 Just call another reader.nextLine() before you ask for your input again, to clear the buffer of the newline char. 再次调用输入之前,只需调用另一个reader.nextLine()即可清除换行符char的缓冲区。

As @adback03 said Scanner (obj). 正如@ adback03所说的Scanner(obj)。 nextDouble() buffers "\\n" and during nextLine() it reads from buffer; nextDouble()缓冲“ \\ n”,并在nextLine()期间从缓冲区读取; 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 :) 更容易阅读:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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