2014-07-14 2 views
0

나는 가지고 있는지 확인 또는 조건 방법을 사용하여 변환 AND 조건자바 변화 OR 및

if (a!=null || !a.equals("")) 
    return a 
else 
    return "n/a" 

어떻게 사용하여이 논리를 실행 않으며 & & 조건에?

+0

*해야 할 일 *이 코드는 무엇입니까? 원래 문자열이 반환되어야하는 값은 무엇입니까? "n/a"값을 반환해야합니까? 깨진 논리 때문에 의도가 불분명합니다. – user2864740

답변

3

De Morgan's laws을 사용하면 AND를 사용하여 로그인 할 수 있습니다. 단순히 내부 전체가 아닌 표현은 얻을 :

다음
if (!(a == NULL && "".equals(a)) 
    return a 
else 
    return "n/a" 

은 위키 피 디아에 드 모르 강의 법칙이며, 당신이 그들을 활용할 수 AND 나 OR 변환 :

"하지 (A와 B)"입니다 "(안 A) 또는 (되지 B)"

같은 "NOT (A 또는 B)", "(안 A) 및 (되지 B)"

+0

하지만 a == null이라고 가정하면이 논리는 "n/a"를 반환하는 대신 a를 반환하지 않습니다. 내부 조건은 어떻게 실행됩니까? 내부 상태가 false이고 그것이 무효화되어 true가되어 코드가 0으로 반환됩니다. – user3838866

+0

== null이고 a.equals ("")가 true 인 경우 if (! (true)) if (false)가되어 "n/a"를 반환합니다. – user2548635

+0

주의해야합니다. 그게 내 초기 답변 이었지만'a' *가 null이면, 당신의'a.equals ("")에 예외를 던질 것이라는 것을 깨달았습니다. 단락 회로를 사용하기 위해서는 이것이 작동하지 않습니다. 그것은 이론상으로 올바르지 만 실제로는 실제로 작동하지 않습니다. –

0

다만 돈과 동일 '티. 변환은 그 a == null이 진실되고 함께 실행하는 경우

!(a == null && a.equals("")) 

그러나이 두 시험은 단지 예로서 허공에서 철수하지 않은 가정하에

는, 그것은 이동거야,이 발생합니다 당신은 얻을 것이다 두 번째 테스트에서 null 참조 예외가 발생했습니다.

당신은 여기에 몇 가지 논리적 경우가 있습니다!

  1. A는 널 (null) -> (참 & & NPE)
  2. A는 ""-> (거짓 & & 참)
  3. "테스트"->! (거짓 & & 거짓)

첫 번째 경우는 여기에 살인자입니다. 그것은 이론 상으로는 훌륭하지만 실제로는 그렇지 않습니다.

그럼에도 불구하고 실제로 나는 왜 당신이 을 원하는지 알 수 없으므로이 작업을 수행하려면이 필요합니다. 이 방법으로는 더 이상 명확하지 않습니다. 사실, 조금 뒤집어서 말하면

if(a == null || a.equals("")) 
    return "n/a"; 

나는 조금 더 분명하다고 생각합니다.

+0

은 && 논리를 사용하여 그것을 검사하는 대신 거기에 || – user3838866

+0

@ user3838866 왜 '&&'를 사용하도록 설정 했습니까? 논리적 인 변환에 대해 더 잘 알고 있다면 나는 그것을 존중합니다. 그러나 실제로는 아무런 이득도 얻지 못하는 편입니다. –