为什么OR运算符行为错误?

时间:2014-07-06 15:06:23

标签: vala

我的输出应该是:“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 s s s s s s s s's's's's。”。

因此它在“d”之前加上“s”,它甚至不关心“e”,但这不是主要问题。 我有一个解决方法,用switch case语句。我只是想知道我做错了什么或者我在Vala中发现了一个错误?

2 个答案:

答案 0 :(得分:1)

if((ts != "d") || (ts != "l"))

对于一切都会回归。对于ts == "d",唯一会返回true的是"d",所以它是唯一能够为左半部分返回false的东西。同时"d" != "l"每次都会返回true。

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

答案 1 :(得分:0)

你或者逻辑错误:如果你在扩展测试中以字母d开头,那么第一次测试将失败d!= d = false所以语句的第二部分将被评估,但是d!= l = true所以你的s会被附加,即使你只是想要追加它,如果它不等于d。

我认为你需要使用和运算符ts不等于d并且不等于l并且不等于t e然后追加s?