Java 在简单计算器中验证数学运算符
我需要帮助验证计算器程序中的运算符,要求用户输入两个数字和一个运算符,即3+2,但我无法验证运算符。如果用户输入+、-、*、或/运算符,它会告诉我该输入无效。验证第一个数字很好,没有问题。有人能帮忙吗Java 在简单计算器中验证数学运算符,java,Java,我需要帮助验证计算器程序中的运算符,要求用户输入两个数字和一个运算符,即3+2,但我无法验证运算符。如果用户输入+、-、*、或/运算符,它会告诉我该输入无效。验证第一个数字很好,没有问题。有人能帮忙吗 import java.util.Scanner; public class SimpleCalculator { public static void main(String[] args) { int int1; String operator;
import java.util.Scanner;
public class SimpleCalculator {
public static void main(String[] args) {
int int1;
String operator;
int int2;
Scanner scan = new Scanner(System.in);
System.out.print("Enter first number: ");
while(!scan.hasNextInt()){
scan.next();
System.err.print("Invalid input please enter a number: ");
}
int1 = scan.nextInt();
System.out.println("Enter operator (+, -, *, /): ");
while(!scan.equals("+") && !scan.equals("-") && !scan.equals("*") && !scan.equals("/")){
scan.next();
System.err.print("Invalid input please enter a valid operator (+, -, *, /");
}
operator = scan.next();
System.out.println("Enter second number: ");
scan.close();
}
}
我建议使用字符类型,因为我们只阅读一封信。这应该做到:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
if(c == '+' || c == '-' || c == '/' || c == '*') {
//operation
}else{
//Error message
}
Scanner
不实现equals()
,因此您正在进行身份比较,而Scanner
永远不等于字符串文字
改为使用此循环:
while(!scan.hasNext("[+\\-*/]")){
仅供参考:您的“跳过”调用应该是
scan.nextLine()
,而不是scan.next()
,因此该行上的所有输入都将被忽略。您需要检查scan.next()的输出,而不是scan的输出
System.out.println("Enter operator (+, -, *, /): ");
operator = scan.next();
while(!operator.equals("+") && !operator.equals("-") && !operator.equals("*") && !operator.equals("/")) {
System.err.println("Invalid input please enter a valid operator (+, -, *, /");
operator = scan.next();
}
你的错误在这里:
while(!scan.equals("+") && !scan.equals("-") && !scan.equals("*") && !scan.equals("/"))
equals()
方法在调用该方法的对象和作为参数传入该方法的对象之间执行比较
例如,语句if(myString.equals(anotherString))
将myString
对象与anotherString
对象进行比较
由于scan
是您的扫描仪的名称,因此当您写入scan.equals(“+”)
时,您正在比较您的扫描仪是否等于字符串(
“+”)。这是不可能的
最容易理解的解决方案是将用户输入的下一个字符串
放入变量中,然后检查该变量是否包含运算符
示例
String operator = scan.next();
while(!operator.equals("+") && !operator.equals("-")
&& !operator.equals("*") && !operator.equals("/")) {
operator = scan.next();
System.err.print("Invalid input please enter a valid operator (+, -, *, /");
}
其他答案将帮助您进一步改进代码。我只是想向您展示对代码所做的最小更改,以解决您的特定问题。:)
当(!scan.equals(“+”&&!scan.equals(“-”&!scan.equals(“*”&!scan.equals(“/”){
您正在将扫描仪
与字符串
进行比较时,请使用此代码。它们是不同的类型,因此永远不会相等。请使用scan.hasNext()
和scan.next()
要获取下一个字符串输入,请使用与整数值相同的方法。
while(!scan.hasNext("[*+/-]")){