2016-10-10 3 views
-2

이해하지 않는 이유는 다음 수준의 인쇄 아웃 :
사실
거짓 I 출력이 있어야한다 생각 간단한 로직이 작동하지 않거나 뭔가 빠졌습니까?

:
거짓이 행이 인쇄 거짓

때문에
거짓

System.out.println((11 >= 1 || 11 <= 10) & (true == false)); 

이 줄도 false로 인쇄해야합니다.

System.out.println(in1To10(11, false)); 

무엇이 여기에 있습니까? 여기 수업이 있습니다.

public class TestClass { 

    public static void main(String[] args) { 
     System.out.println(in1To10(11, false)); 

     System.out.println((11 >= 1 || 11 <= 10) & (true == false)); 

    } 

    public static boolean in1To10(int n, boolean outsideMode) { 
     if ((n >= 1 || n <= 10) & (outsideMode == false)) { 
      return true; 
     } 

     return false; 
    } 
} 
+0

당신의 기대와 결과는 동일합니다 .. – tkausl

+1

'true false'를 출력하고 그것을 인쇄 할 것을 기대 했습니까? 'true false'? 질문은 무엇입니까? – Tunaki

+0

나는 내 질문에 찬사를 보냈다. 내 예상 출력은 false입니다. false –

답변

-1

의이 in1to10에서 테스트 분해하자 outsideMode을 = 거짓; n = 11;

  • (N> = 1 || < N = 10) => (> = 1 || < 11 = 1011) => (참 || 거짓) => 그래서 TRUE
  • outsideMode == 거짓 => 거짓 == 거짓 => 그래서 TRUE
  • 결국

:

public static boolean in1To10(int n, boolean outsideMode) { 
    if ((TRUE) & (TRUE)) { 
     return true; 
    } 

    return false; 
} 

=> TRUE 반환!

+0

아니요, Java에서는 부울 true가 'true'입니다. '사실'이 아닙니다. – xenteros

+0

이것이 더 의미가 있습니다! 그것을 분해 해 주셔서 감사합니다. –

+0

이 경우 우리는 정확한 자바 구문이나 핵심 단어를 말하는 것이 아니라 불리언 논리를 말합니다. – Zorglube

2

값이 1에서 10 사이의 범위에 있는지 테스트하고 싶습니까? 하는 경우, 변경 (N> = 1 || N < = 10) 이잖아 (N> = 1 & & N < = 10)

1

그래서이 광고는 또한 잘못된 인쇄해야하는 경우 : System.out.println(in1To10(11, false));

아니요,이 줄은 false을 인쇄해서는 안됩니다. 첫 번째 매개 변수 인 11은 실제로는 n >= 1 || n <= 10이라는 표현을 다른 표현식과 일치하는 11 >= 1 || 11 <= 10으로 바꾸고 두 번째 매개 변수 falseoutsideMode == falsefalse == false으로 바꾼 반면 다른 표현식은 true == false이됩니다. main로부터의 출력이 거짓 인 동안은 true == falsefalse을 생성하기 때문에, 비교가 false == false, true을 생성하기 때문에 in1To10로부터 출력 true이다 두 출력이 다른 이유

.

참고 :n110 (포함) 사이에있는 경우 발현 검사의 명시된 목표를 일치하지 않습니다. 이를 수행하려면 ||&&으로 대체해야합니다.

-1

이것은 true을 반환합니다. 방법?

if ((n >= 1 || n <= 10) & (outsideMode == false)) { 
     return true; 
    } 

당신은 함수에 11false을 전달하고 있습니다. 이 첫 번째 조건 내부로 이동하는 경우

그것은 n >= 1true입니다 11 >= 1 의미가 있는지 확인합니다, 그래서 n<=10를 확인하지 않습니다. 다시는 두 번째 조건을 확인하고 당신의 outsideModefalse이다, 이렇게 될 것입니다

,

(true) & (true)는 따라서 모든 조건이 true 것을하고 funciton는 return true을 것이다.다시 두 번째 조건

,

(11 >= 1 || 11 <= 10) & (true == false) 

를 그것은 false를 리턴한다. 방법?

11 >= 1은 이고 다시 11 <= 10을 확인하지 않으며 오른쪽은 false입니다. 그러면 상태는 true & false이되고 false이됩니다.

+0

그게 내가 해적이라고 생각하지만 그 인쇄가 틀린 거지. 그것은 사실입니다. –

+0

그래서 함수에서 false를 반환하겠습니까? 너를 바꿔라. || 에 & 함수 안쪽으로 보내면 false를 반환합니다. – Pirate

+0

좋아,하지만 설명 에선이 줄이 틀릴 것입니다. "조건이 이렇게되면 참/거짓이 될 것입니다." 아직도 정확한가요 ???설명에서 –

2
(     true     ) 
    (  true  ) & (  true  ) 
    (true || false ) & (  true  ) <--- false == false is true! 
if ((n >= 1 || n <= 10) & (outsideMode == false)) { 
    return true; 
} 

보기는 n >= 1입니까? 예, 그렇습니다. true입니다. true v p <-> true, Java는 더 이상 확인하지 않습니다. true /\ true <-> true이므로 if을 입력하십시오. return true;

코드는 일반 영어로되어 있습니다 :

if ((n is greater or equal to 1 AND smaller or equal 10) AND is the mode set to false) 
    return true 

자바에있는은 다음과 같습니다

if ((n is greater or equal to 1 OR smaller or equal 10) AND is the mode set to false) 
    return true 

하면, 그것은 될 수는 1과 10 포함 사이 인 경우는 true를 반환하려면 :

또한
if ((n >= 1 && n <= 10) && (outsideMode == false)) { 
    return true; 
} 

가 논리 그대로 &&||를 사용하는 기억 부울 값을 처리 할 때 |& 비트 단위 논리 연산자 대신 al 연산자를 사용하십시오.

+0

Java가 & 연산자를 검사하지 않는다는 것을 알 수 있습니까? –

+0

있습니다. '||'연산자를 검사조차하지 않습니다. 대안을 가지고 있기 때문에 그 중 하나가 사실이라면 사실입니다. n> = 1이면 true, 즉 즉시 true를 반환합니다. – xenteros

+0

@ D.Ace 내 대답을 편집 했으므로 이해하기 쉽습니다. 아직도 뭔가를 이해하지 못한다면, 내가 준 변화를 시험해보고, 그것이 어떻게 작용하는지보고 다음 질문을하십시오. 내가 대답을 – xenteros

1

필자는 in1to10 기능에서 (false == false)를 비교하고 main (true == false)에서 비교하고 있다고 생각합니다. 결과도 마찬가지입니다. 희망이 도움이됩니다.

매개 변수 :