我的输出应该是:“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中发现了一个错误?
答案 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?