繁体   English   中英

两次打印

[英]Printing Out Twice

我编写了一个简单的程序用于教学目的,除了可以打印出名称和所选计算答案的那一部分以外,其他所有功能都可以正常工作。 if语句似乎执行了两次,好像它在前进之前向后退了一步。

它会打印出“您想继续吗”,但不会提示用户输入“是/否”,而是会打印出“再次计算”的答案,然后是他们是否愿意继续,除非第二次回答。实际上会等待输入。

提前致谢。

这是我的代码:

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;

            }
        }
    }
}

问题是nextDouble()函数。 是的,这将读取一个double,但也会将换行符( \\n )读取到缓冲区中。 因此,下次调用nextLine() ,它将立即解析换行符,而不是等待输入。 再次调用输入之前,只需调用另一个reader.nextLine()即可清除换行符char的缓冲区。

正如@ adback03所说的Scanner(obj)。 nextDouble()缓冲“ \\ n”,并在nextLine()期间从缓冲区读取; 因此,虽然循环继续

[非主题]我建议您使用开关盒

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");
}

更容易阅读:)

暂无
暂无

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

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