【问题标题】:what is wrong with this if-statement这个 if 语句有什么问题
【发布时间】:2016-06-18 05:54:44
【问题描述】:

我完全不知道这个 if 语句有什么问题,当我发送值 lon = -3 和 lat = 7 时,它应该返回 false,但事实并非如此。

  if (b < 0 && ((lon > 8 && lon < 0) || (lat > 8 && lat < 0)))
  {

    return false;
  }
  else
  {
    return true ;
  }

【问题讨论】:

  • b的值是多少?
  • 子句 (lon &gt; 8 &amp;&amp; lon &lt; 0)(lat &gt; 8 &amp;&amp; lat &lt; 0) 没有意义...我的意思是,他们永远不会评估为 true... lonlat 怎么可能是同时大于 8 和小于 0?
  • @AlexandreLucchesi 你应该发布一个答案,因为那是“这个 if 语句有什么问题
  • @IvanStoev 完成。 :)

标签: c# if-statement


【解决方案1】:

分解每个值...

int lon = -3;
int lat = 7;

  if (b < 0 && // i don't know b value
            ((-3 > 8 && //false
            -3 < 0)     //true
     || (7 > 8 && //false
     7 < 0 //false
     ))) 
  {

    return false;
  }
  else
  {
    return true ;
  }

结果 国际龙= -3; int lat = 7;

  if (b < 0 && // i don't know b value
            (false || false)) 
  {

    return false;
  }
  else
  {
    return true ;
  }

最后是:

  if (false) 
  {

    return false;
  }
  else
  {
    return true ;
  }

然后它返回真!

【讨论】:

    【解决方案2】:

    虽然if 声明的逻辑存在缺陷,但这里可能还有一些东西需要学习。与其评估if 语句然后返回truefalse,您可以稍微清理一下,然后执行以下操作:

    return b < 0 && ((lon > 8 && lon < 0) || (lat > 8 && lat < 0))
    

    但回到逻辑错误,也许你对不等式运算符如何工作的理解。如果您执行lon &gt; 0 &amp;&amp; lon &lt; 8 之类的操作会更有意义,它会读取为经度大于零且小于八

    【讨论】:

      【解决方案3】:

      如果我正确阅读了您的陈述,您将永远不会出错。要获得虚假的 lon,我必须小于零且大于 8……这是不可能的。与纬度相同的情况。

      【讨论】:

      • 他永远不会因为有缺陷的逻辑而变得真实。
      • whoot...有人可以向我解释为什么我的正确答案被否决了吗?
      • 我已经解释过了。你会弄错而不是“永远不会弄错”。你的答案是完全错误的。如果 AND 的一侧评估为 false,则该语句将评估为 false。
      • @AlexandreLucchesi 我非常不同意,因为回答者的回答完全错误。他是说这两个条件都需要被评估为 false 才能返回 false,但这是完全错误的
      猜你喜欢
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多