【问题标题】:Why is ((ans != 'N') || (ans != 'Y')) always true?为什么 ((ans != 'N') || (ans != 'Y')) 总是正确的?
【发布时间】:2015-07-25 10:32:08
【问题描述】:

我正在尝试提示用户再次旋转,而我的“while”表达式总是以错误的形式返回...有人有什么想法吗?

reSpin = false;
if (reSpin == false){
    System.out.println("Would you like to spin again? Y/N");
    char ans = in.next().charAt(0);
   if (ans == 'Y'){
       reSpin =true;

   }else if (ans == 'N'){
       System.out.println("Thank you for playing!");
   }else {
       while ((ans != 'N') || (ans != 'Y')) {
           System.out.println("Invalid answer, please only enter Y/N");
           System.out.println("Would you like to spin again? Y/N");
           ans = in.next().charAt(0);
       }
   }


}

【问题讨论】:

  • Y == N?那么如果ansY,则不等于NN == Y 呢?如果ansN 它不是Y。因此,没有一个字母可以同时满足这两个条件。另外,如果你应用De Morgan's laws,那么你的表达式可以写成((ans == 'N') && (ans == 'Y')),这可能更清楚。
  • 感谢@ElliottFrisch 提到德摩根!这是我今天看到的第二个可以用这些简单规则解决的问题!

标签: java while-loop boolean


【解决方案1】:

您可能想使用:

   while ((ans != 'N') && (ans != 'Y')) {

检查ans 不是 N 并且 不是 Y。如果你在那里使用 ||(或),那么它将检查 ans 不是 N , 或不是 Y(对于 ans 的任何值都是如此)。

【讨论】:

    【解决方案2】:

    很简单:根据您的比较,ans 必须同时是 YN

    【讨论】:

    • 我知道。幸运的是在这里使用计算机:是否。
    【解决方案3】:

    || 如果 任一 两边的表达式为真,则返回真。

    如果ansY,那么ans != 'N' 为真,所以整个表达式(ans != 'N') || (ans != 'Y') 为真。如果ansN,那么ans != 'Y'为真,所以整个表达式为真。

    你想要(ans != 'N') && (ans != 'Y'),它说“ans 不是'N' 并且 ans 也不是'Y'。”

    【讨论】:

      【解决方案4】:

      ans不能同时是'N'和'Y',所以它总是要么不等于'N',要么不等于'Y'。您可能希望将其更改为:

      while ((ans != 'N') && (ans != 'Y'))
      

      这确保它既不等于“N”也不等于“Y”。

      【讨论】:

        猜你喜欢
        • 2020-02-07
        • 2017-11-27
        • 2022-11-27
        • 2015-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-15
        • 1970-01-01
        相关资源
        最近更新 更多