【问题标题】:Semantic or logical error?语义或逻辑错误?
【发布时间】:2016-04-24 14:16:13
【问题描述】:

我已经看到了很多关于这个主题的问题,但我仍然无法弄清楚以下是语义错误还是逻辑错误。
假设我有以下 Java 代码:

boolean a = false;
if (a = false) System.out.println("yes");
else System.out.println("no");

您可能已经看到我可能想写下== 而不是=,但是:程序编译得很好并且运行没有错误。但是,它确实没有给我预期的结果。

我在某处发现语义错误总是给出错误(在编译或运行时),所以这一定是一个逻辑错误。然而,另一个文本说语义错误并不总是给出错误。因此问题是:上面的例子是否包含语义或逻辑错误?

【问题讨论】:

  • 这两个不是一回事吗?在我读到这些术语的每一个地方,似乎两者的定义都是程序在语法上是有效的(即它是一个有效的程序),但它并没有按照程序员的意图去做。
  • @LasseV.Karlsen 我最初也是这么想的,但实际上并非如此。此外,例如,如果 aString,这将被视为语义错误。
  • @LasseV.Karlsen (据我了解,这是因为 pattern 是正确的,但情况(变量类型)不是。)

标签: semantics


【解决方案1】:

通过编写以下表达式:a = false 您基本上是在分配一个值为 false 的变量,该变量可以正常工作并在成功操作时返回 true,这就是为什么您将始终在控制台中打印“yes”的原因。

【讨论】:

  • 您不仅没有回答他的问题,而且您对if (a = false)所做的事情的解释也是错误的。结果不是true是因为赋值成功,是false是因为java中一个赋值表达式的值就是赋值的值,所以是false
  • @LasseV.Karlsen 是对的,我知道。您能再仔细阅读一下这个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多