2012-05-01 2 views
1

나는 이것이 아마 정말 바보 알고 있지만,이 경우 문이 실패한 이유를 알아낼 수 없습니다 내가 콘솔에서 1 또는 2를 입력하면이 단락 된 if 문에 어떤 문제가 있습니까?

문이 실패 할 경우, 첫 번째,하지만 두 번째는 경우 통과 먼저 결과를 bool에 먼저 저장합니다. 왜? 나는 아마 여기 무언가를하고있을거야? , amOrPm가 동일하지 않는 경우 1 또는 amOrPM2 동일하지 않습니다 :

Console.WriteLine("Enter 1 for AM or 2 for PM?"); 
string amOrPM = Console.ReadLine(); 

//Why does this fail if I enter 1 or 2? 
if (amOrPM != "1" || amOrPM != "2") 
    Console.WriteLine("You must enter 1 for AM or 2 for PM. Try again."); 

//This works! 
bool valid = (amOrPM != "1" || amOrPM != "2"); 
if (!valid) 
    Console.WriteLine("You must enter 1 for AM or 2 for PM. Try again."); 

난 그냥 if 문 첫 번째에 대한 발견, 내가 대신 ||의 & &을 넣어했다,하지만 난 그것을 읽기 때문에이 혼란 콘솔 행으로 이동하십시오. 이 잘못의 정의를 읽고 있습니까?

+9

'amOrPM! = "1"|| amOrPM! = "2"'는 항상 true입니다. 'if (amOrPM! = "1"&& amOrPM! = "2")'를 원하지 않습니까? –

+0

&&를 의미 했습니까? –

+2

'(amOrPM! = "1"|| amOrPM! = "2")'는! (amOrPM == "1"&& amOrPM == "2")'와 동일합니다. DeMorgan의 법을 배우십시오. – Oded

답변

7

이런 식으로 생각하십시오. 인 경우, 2 일 수는 없으며 그 반대의 경우도 마찬가지입니다. 그래서 그것은 일 것입니다. "not 1"또는 "not 2"입니다.

당신은 의미 :

if (!(amOrPm == "1" || amOrPm == "2")) 

더 많은 변환을위한 De Morgan's Laws를 참조하십시오

또는

if (amOrPM != "1" && amOrPM != "2") 

(. 그것은 "1이 아닌" 을 있다면 그것은 "아니 2"이다).

+0

OK 이렇게하면 해제됩니다. 나는 나를 던지려는 것이''and'라는 단어 였을 것입니다. 나는 이것을 볼 때,''amOrPM''이 어떤 이유로 2 개의 값을 가질 수 있다고 생각합니다. – Xaisoft

2

정확한 것은 if (amOrPM != "1" && amOrPM != "2")입니다. 1 또는 2가 아닌 경우 쓰기를 원합니다. 두 번째 표현은 부정이거나 1 또는 2입니다.

3

You 've got! 두 번째 경우에서 유효합니다. 결과를 반전합니다. 그것을 제거하십시오! 둘 다 똑같이 행동 할거야.

2

또는 논리적 인 또는. 이것이 의미하는 바는 다음과 같습니다.

1을 입력하면 첫 번째 조건은 거짓이지만 두 번째 조건은 참이므로 실패합니다.

2를 입력하면 첫 번째 조건은 참이지만 두 번째 조건은 거짓이므로 실패합니다. 조건이 둘 다 거짓 일 수있는 방법은 없습니다.

관련 문제