Java中if语句判断运算符字符串始终为false的问题求助
问题分析与修复方案
从你的描述和代码来看,有两个核心问题导致了这个异常现象,咱们一步步拆解解决:
1. 字符串比较逻辑错误:误用==而非equals()
在Java里,==运算符比较的是两个字符串对象的内存引用地址,而不是字符串的实际内容。哪怕两个字符串内容完全一样,只要它们是不同的对象实例,==都会返回false。而equals()方法才是专门用来比较字符串内容是否相等的标准方式。
你的handleSolution方法里用了myOperator == "+"这种写法,这就是为什么无论你选哪个运算符,都会走到else分支输出"wtf"的根本原因。
2. 潜在的运算符文本冗余问题(从打印结果推测)
你提到点击+按钮后,打印的内容看起来是"+ 1",结合长度为1的输出,应该是打印格式导致的误解——实际是先输出了myOperator的值"+",下一行输出了长度1,看起来像是连在一起了。不过保险起见,还是要检查按钮绑定的文本是否意外带有空格(比如FXML里按钮文本写了"+ "而非"+")。
修复后的代码
把所有==替换为equals(),同时加上空指针防护和除数为0的判断(计算器必备):
public double num1, num2, num3; public String myOperator; @FXML private void handleSolution(ActionEvent event){ // 先判断运算符不为null,避免空指针异常 if(myOperator != null){ // 把常量放equals()前面,即使myOperator为null也不会报错 if("+".equals(myOperator)){ System.out.println("plus"); num3 = num1 + num2; }else if("-".equals(myOperator)) { System.out.println("minus"); num3 = num1 - num2; }else if("*".equals(myOperator)){ System.out.println("multiplication"); num3 = num1 * num2; }else if("/".equals(myOperator)){ System.out.println("division"); // 计算器必须加的除数非零判断 if(num2 != 0){ num3 = num1 / num2; }else{ System.out.println("Error: Cannot divide by zero"); } }else{ System.out.println("Unknown operator"); // 用引号包裹运算符值,方便直观查看是否有隐藏空格 System.out.println("Operator value: '" + myOperator + "'"); System.out.println("Operator length: " + myOperator.length()); } }else{ System.out.println("No operator selected"); } }
额外的保险检查
- 检查FXML文件里的运算符按钮
text属性,确保是纯"+"、"-"等,没有多余空格或特殊字符,比如:<Button text="+" onAction="#setOperator"/> - 在设置
myOperator的按钮点击方法里,加上trim()去除首尾空白,避免意外的空格干扰:@FXML private void setOperator(ActionEvent event){ Button btn = (Button) event.getSource(); // trim()能去掉文本首尾的空格、换行符等空白字符 myOperator = btn.getText().trim(); }
这样修改后,你的运算符判断逻辑就能正常工作了。
内容的提问来源于stack exchange,提问作者mdash1
相关产品推荐
相关产品推荐

