2009-08-28 4 views
0
bool isValid = false; 
string username = "someadmin"; 

If(!String.IsNullOrEmpty(username) && !(username.IndexOf("admin") != -1) 
    isValid = true; 

더블 네거티브가있는 두 번째 부분은 나를 교차시키고 있습니다!이 메소드는 무엇을 반환합니까?

+5

... 글쎄, 우리가 반환 진술을 볼 수 없다고 생각할 때, 나는 우리가 질문에 대답 할 수 있다고 생각하지 않는다 -] –

+12

왜 우리에게 물어볼 까? 바로 코드가 있습니다. 실행하여보십시오! –

+0

이 코드는 컴파일되지 않습니다. 타의 추종을 불허하는 연옥. –

답변

4

+0

젠장, 저를 때려주십시오. – Stephanvs

+0

"IndexOf is> = 0"- 아닙니다, indexof는 -1이 될 수도 있습니다. "문자열이 발견되면 0부터 시작하는 인덱스 위치이며, 그렇지 않으면 -1입니다." –

+0

롤 (Lol), 나는 빠르게 읽을 수있는 코드 완벽 주의자를 만들고있었습니다. 실제로 username.IndexOf ("admin")> = 0입니다. 반환 값이 4 또는 5 여야한다는 사실에 대해 생각할 수있는 것보다 더 빨리 입력하고있었습니다. 컴퓨터가 그럴 것 같아요 ...하지만 다행히도 질문자가 내 대답에 도움이되었습니다.) – Ropstah

1

그것은 거짓 돌아갑니다 ... 그것은 처음에 있었다으로

!String.IsNullOrEmpty(username)   // this is true, the string is not NullOrEmpty 
!(username.IndexOf("admin") != -1)  // IndexOf is >= 0, so != 1 is true. But the first ! makes it false 

그래서 IsValid가 같은 값이 포함됩니다 false를 돌려줍니다.

0

isValid이 거짓입니다.

(Nitpick :이 코드는 아무것도 "반환"하지 않습니다. 그것은 단지 isValid 변수의 값을 설정)

1

평범 언어 버전 : (이름이 null 또는 비어 있지

경우 사용자 이름에 "admin"이 포함되지 않음) isValid = true;

0

첫 번째 부분 : 사용자 이름이 null 또는 빈 문자열인지 확인하십시오. if의 두 번째 부분 : 사용자 이름에 admin 하위 단어가 들어 있는지 확인하십시오. 아마도 Autor가 두 문자열을 비교해 보았습니다. 결과 : 사용자 이름이 비어 있지 않고 사용자 이름이 admin이 아닌 경우 isValid는 true입니다. 그렇지 않으면 유효합니다 - 거짓.

0

거짓. 하지만 나는 그 질문을받지 못합니까? 이걸 실행할 수는 없습니까? 어떤 이중 부정적인? 값은 단지 뒤집어지고 괄호는 명령문이 실행되는 순서를 명확하게 나타냅니다.

0

isValid에 저장된 값은 false입니다.

10

난 당신 DeMorgan's Laws에 제시 할 수있다 : 따라서 이중 부정을 제거 ...

if (!(String.IsNullOrEmpty(username) || username.IndexOf("admin") != -1)) { 
    isValid = true; 
} 

:

NOT (P OR Q) = (NOT P) AND (NOT Q) 
NOT (P AND Q) = (NOT P) OR (NOT Q) 

그래서, 당신은 그것을 다시 할 수있다.

또한, 당신은 말할 수 :

if (String.IsNullOrEmpty(username) || username.IndexOf("admin") != -1) { 
    isValid = false; 
} 

를 ... 모든 악재를 제거한다.

또한, 당신은 말할 수 :

isValid = !(String.IsNullOrEmpty(username) || username.IndexOf("admin") != -1)); 

... 그것은 좋은 컴팩트하게 할 수 있습니다. 때문에

하지만 심각 ;-) 누락 된 괄호에

+0

DeMorgan은 훌륭합니다. ''admin ''을 포함하도록 사용자 이름을 요구하지 않았습니까? –

+0

ㅎ, 좋은 지적. 그게 내가 복사 붙여 넣기를 위해 얻는 것입니다. –

0

그것은 당신에게 구문 오류를 줄 것이다, 그것은 false를 돌려줍니다.

! String.IsNullOrEmpty (사용자 이름) // 이름이 비어 NOT NULL과 NOT 경우 => 진정한

username.IndexOf ("관리자")! = -1 // "관리자는"사용자 이름에서 발견되면 (-1이 아님) => true

! (username.IndexOf ("admin")!= -1) // "admin"이 username => false에 없으면

결론적으로 if 문 조건이 충족되지 않으므로 isValid는 false로 유지됩니다.

추신 : 저는 C# 프로그래머가 아니지만 IndexOf (문자열)가 -1 일 때 찾을 수 없다고 생각합니다.

관련 문제