Java 打印两次

Java 打印两次,java,if-statement,while-loop,Java,If Statement,While Loop,我为教学目的编写了一个简单的程序,除了打印出您选择的计算的名称和答案的部分外,其他一切都正常。if语句似乎执行了两次,就好像它在前进之前后退了一步 它会打印出“您想继续吗”,但不会提示用户输入Y/N,而是会再次打印出计算的答案,然后是他们是否想继续的问题,除非第二次实际等待输入 提前谢谢 这是我的密码: import java.util.Scanner; public class Numbers { public static void main(String[] args)

我为教学目的编写了一个简单的程序,除了打印出您选择的计算的名称和答案的部分外,其他一切都正常。if语句似乎执行了两次,就好像它在前进之前后退了一步

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

提前谢谢

这是我的密码:

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()
函数。是的,这会读取一个双精度字符,但它也会将换行符(
\n
)读入缓冲区。因此,下次调用
nextLine()
,它将立即解析换行符,而不是等待您的输入。在再次请求输入之前,只需调用另一个
reader.nextLine()
,以清除换行符的缓冲区。

问题在于
nextDouble()
函数。是的,这会读取一个双精度字符,但它也会将换行符(
\n
)读入缓冲区。因此,下次调用
nextLine()
,它将立即解析换行符,而不是等待您的输入。在再次请求输入之前,只需调用另一个
reader.nextLine()
,以清除换行符的缓冲区。

问题在于
nextDouble()
函数。是的,这会读取一个双精度字符,但它也会将换行符(
\n
)读入缓冲区。因此,下次调用
nextLine()
,它将立即解析换行符,而不是等待您的输入。在再次请求输入之前,只需调用另一个
reader.nextLine()
,以清除换行符的缓冲区。

问题在于
nextDouble()
函数。是的,这会读取一个双精度字符,但它也会将换行符(
\n
)读入缓冲区。因此,下次调用
nextLine()
,它将立即解析换行符,而不是等待您的输入。在再次请求输入之前,只需调用另一个
阅读器.nextLine()
,清除换行符的缓冲区。

正如@adback03所说的Scanner(obj)。nextDouble()buffers“\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");
}
更容易阅读:)

正如@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");
}
更容易阅读:)

正如@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");
}
更容易阅读:)

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

更容易阅读:)

哪个
if
plz指定哪个if块和哪个while循环?您看到两次的文本是哪一行?请检查编辑。对不起,我说得不够清楚。感谢您的回答为什么不
while(选项<1&&choice>4)
?哪个
if
请指定哪个if块和哪个while循环?您看到两次的文本是哪一行?请检查编辑。对不起,我说得不够清楚。感谢您的回答为什么不
while(选项<1&&choice>4)
?哪个
if
请指定哪个if块和哪个while循环?您看到两次的文本是哪一行?请检查编辑。对不起,我说得不够清楚。感谢您的回答为什么不
while(选项<1&&choice>4)
?哪个
if
请指定哪个if块和哪个while循环?您看到两次的文本是哪一行?请检查编辑。对不起,我说得不够清楚。感谢您的回复为什么不
(选项<1&&choice>4)
?这就解决了问题。非常感谢。:)这就解决了问题。非常感谢。:)这就解决了问题。非常感谢。:)这就解决了问题。非常感谢。:)