抱歉,如果这听起来很愚蠢,但我是Java的新手,当我遇到困难时正在制作计算器程序。
我在程序之前已经使用扫描仪输入了输入,但是当我稍后尝试输入时,程序不接受输入并继续。
这是代码 -
import java.util.*;
public class calc {
public static final Scanner input = new Scanner(System.in);
public static void main(String[] args) {
while(true) {
calculate();
System.out.print("Would you like to run again? Y/N: ");
String repeat = input.nextLine().toLowerCase();
if (!(repeat.equals("y") || repeat.equals("yes"))) {
System.out.println("\nGoodbye!\n");
break;
}
}
}
public static void calculate() {
System.out.println("\nWelcome to THE CALCULATOR by PRATINAV BAGLA");
System.out.print("\nAdd, Subtract, Multiply, Divide or Modulus? : ");
double fsnum, scnum, ans;
String choice = input.nextLine().toLowerCase();
if(choice.equals("add") || choice.equals("subtract") || choice.equals("multiply") || choice.equals("divide") || choice.equals("modulus")) {
System.out.print("Enter the first number: ");
fsnum = input.nextDouble();
System.out.print("Enter the second number: ");
scnum = input.nextDouble();
switch(choice) {
case "add":
ans = fsnum+scnum;
break;
case "subtract":
ans = fsnum-scnum;
break;
case "multiply":
ans = fsnum*scnum;
break;
case "divide":
ans = fsnum/scnum;
break;
case "modulus":
ans = fsnum%scnum;
break;
default:
ans = 0;
break;
}
System.out.println("The answer is: " + ans);
} else {
System.out.println("ERROR: Please select a valid operation.");
}
}
}
输出是 -
Welcome to THE CALCULATOR by PRATINAV BAGLA
Add, Subtract, Multiply, Divide or Modulus? : add
Enter the first number: 3
Enter the second number: 4
The answer is: 7.0
Would you like to run again? Y/N:
Goodbye!
正如您所见,跳过了最后一次再次运行的输入,程序似乎将其视为“”或null。 如果选择了无效操作,似乎不会发生这种情况。 -
Welcome to THE CALCULATOR by PRATINAV BAGLA
Add, Subtract, Multiply, Divide or Modulus? : yaya
ERROR: Please select a valid operation.
Would you like to run again? Y/N: n
Goodbye!
任何解决方案?
答案 0 :(得分:1)
尝试在scnum = input.nextDouble()之后立即输入input.nextLine();我认为你需要摆脱换行符(nextDouble()不能读取)。 有关更好的解释,请参阅Using scanner.nextLine()。)
答案 1 :(得分:1)
Input.nextDouble()不会扫描新的行charcater。它会在遇到新的行字符时等待你给出一个数值,它会返回缓冲区中的新行字符。所以添加一个nextDouble()
之后的dummy input.nextLine()答案 2 :(得分:1)
添加到atomSmasher所说的内容,您可以通过input.nextLine()
替换input.next()
的调用来轻松解决此问题。见下图