【问题标题】:Why does the OR operator misbehave?为什么 OR 运算符行为不端?
【发布时间】:2014-07-06 15:06:22
【问题描述】:

我的输出应该是:“d s cow s moo s spam s eggs e”

如果我使用此代码,它可以正常工作:

if((ts != "d")){
    ts_re.append("s");
}

(ts是当前字符串。我遍历了一些字符串,我想检查它是“d”,还是“l”和“e”)

当我将 if 扩展为:

if((ts != "d") || (ts != "l")){
    ts_re.append("s");
}

输出为:“s d s cow s moo s spam s eggs e”。

所以它在“d”之前放了一个“s”,它甚至不关心“e”,但这不是主要问题。 我有一个使用 switch case 语句的解决方法。我只想知道是我做错了什么还是发现了 Vala 的错误?

【问题讨论】:

  • 我不知道 vala 但我敢打赌你的问题是你需要使用 && 而不是 ||。
  • 是的...我觉得自己很愚蠢,谢谢

标签: vala


【解决方案1】:
if((ts != "d") || (ts != "l"))

这将为所有内容返回 true。 ts == "d" 唯一会返回 true 的是 "d",所以它是唯一会为左半部分返回 false 的东西。同时"d" != "l"每次都会返回true。

false || true 将返回 true。由于两半不可能返回false,因此这个|| 将始终返回true。

【讨论】:

  • 好吧..谢谢你的解释。我认为它会单独评估事物。我不知道这是这样工作的。
  • 它确实单独评估它们。然后你的 OR 他们在一起。当运算符的两半分别为 true 和 false 时,OR 返回 true。
【解决方案2】:

您的 or 在逻辑上不正确:如果您在扩展测试中以字母 d 开头,则第一个测试将失败 d!=d = false 因此将评估语句的第二部分但 d!=l= true 所以你的 s 会被附加,即使你只想在它不等于 d 时附加它。

我觉得你需要用and操作符ts不等于d不等于l又不等于t e然后追加一个s?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 2022-08-17
    • 2011-01-02
    • 2016-04-04
    • 1970-01-01
    相关资源
    最近更新 更多