2014-07-06 2 views
0

내 출력해야한다 "DS 젖소의 무의 스팸의 계란 전자"왜 OR 연산자가 잘못 되었습니까?

이 코드를 사용하는 경우는 잘 작동합니다.

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

(TS는 현재 문자열입니다 좀 문자열을 반복

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

출력은 : "SDS 암소의 무 및 I 그것이"D "또는"L "과"E ")

경우 I을받는 경우를 확장 할 때 확인하려는 스팸의 달걀 e ".

그래서 "d"앞에 "s"를 넣고 "e"는 신경 쓰지 않지만 주된 문제는 아닙니다. switch case 문을 사용하여이 문제를 해결할 수 있습니다. 나는 단지 내가 잘못된 것을했는지 또는 Vala에서 버그를 발견했는지 알고 싶습니다.

+3

나는 vala를 모른다. 그러나 당신의 문제는 && not ||를 사용해야한다는 것이다. –

+0

예 ... 바보 같아서 고맙습니다. – Levi

답변

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

모든 항목에 대해 true를 반환합니다. ts == "d"에 대해 true를 반환하는 유일한 것은 "d"이므로 왼쪽 절반에 false을 반환하는 유일한 방법입니다. 한편 "d" != "l"은 매번 true를 반환합니다.

false || truetrue을 반환합니다. 두 반쪽 모두 false을 반환하는 것은 불가능하므로이 ||은 항상 true을 반환합니다.

+0

잘 설명해 주셔서 감사합니다. 나는 그것을 별개로 평가한다고 생각했다. 나는 이것이 이런 식으로 작동한다는 것을 몰랐다. – Levi

+0

별도로 평가합니다. 그런 다음 함께 OR하십시오. OR은 다른 모든 시나리오에 대해 연산자의 두 반쪽이 모두 '참'이고 거짓이라면 '참'을 반환합니다. – nhgrif

0

당신이 또는 당신의 확장 테스트에서 문자 d로 시작하는 경우 첫 번째 테스트는 실패합니다! = d = false 그래서 문장의 두 번째 부분은 평가되지만 d! = l = true가됩니다. 따라서 d와 같지 않은 경우에만 추가하기를 원한다고해도 s가 추가됩니다.

나는 연산자를 사용해야하고 t는 d와 같지 않고 l과 같지 않으며 t를 덧붙여서 s를 추가한다고 생각하십니까?

관련 문제