问题
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