.equals 与其他布尔函数

.equals with other Boolean functions

在我的程序的一小部分中,我试图验证是否有人输入了 M、m、F、f,并且在大多数情况下我都输入了,但是当我将这些语句放在一起时似乎出了点问题。例如,

   String _gender = "M";
   if(!"m".equals(_gender.toLowerCase())||!"f".equals(_gender.toLowerCase())){
      System.out.println("try again");
   }else 
      System.out.println("success");

它告诉我再试一次,但是当我把它写成:

  String _gender = "M";
   if(!"m".equals(_gender.toLowerCase())){
      System.out.println("try again");
   }else 
      System.out.println("success");

它让我成功了。我不知道这是否与我使用 or 的方式有关,但这就是我的猜测。我还认为这可能与支票同时检查两者或某物有关。我知道我已经有一段时间了,它让我感到困惑。

逻辑错误。当两个 equal() 结果都为 false 时,它​​应该进入“重试”状态。

String _gender = "M";
if(!"m".equals(_gender.toLowerCase()) && !"f".equals(_gender.toLowerCase())){
  System.out.println("try again");
}else 
  System.out.println("success");

让我们评估一下您的代码:

String _gender = "M";
if(!"m".equals(_gender.toLowerCase())||!"f".equals(_gender.toLowerCase()))

if(!true || !false) => if(false || true) => true

现在你明白了得到输出的原因,try again

现在,让我们修复它:

照做

String _gender = "M";
if (!("m".equals(_gender.toLowerCase()) || "f".equals(_gender.toLowerCase()))) 

计算结果为 如果 (!(true || "f".equals(_gender.toLowerCase()))) => (!(true)) => false

这会给你预期的输出,success