Java 打印两次
我为教学目的编写了一个简单的程序,除了打印出您选择的计算的名称和答案的部分外,其他一切都正常。if语句似乎执行了两次,就好像它在前进之前后退了一步 它会打印出“您想继续吗”,但不会提示用户输入Y/N,而是会再次打印出计算的答案,然后是他们是否想继续的问题,除非第二次实际等待输入 提前谢谢 这是我的密码: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)
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)
?这就解决了问题。非常感谢。:)这就解决了问题。非常感谢。:)这就解决了问题。非常感谢。:)这就解决了问题。非常感谢。:)