2017-12-30 15 views
-3
class BoolArray { 
    boolean [] b = new boolean[3]; 

    int count = 0; 

    void set(int i) 
    { 
     b[i] = true; 
     ++count; 
    } 

    public static void main(String [] args) 
    { 
     BoolArray ba = new BoolArray(); 
     ba.set(0); 
     ba.set(2); 
     ba.test(); 
    } 

    void test() 
    { 
     if (b[0] && b[1] | b[2]) 
      count++; 
     if (b[1] && b[(++count - 2)]) 
      count += 7; 
     System.out.println("count = " + count); 
    } 
} 

기능하는 논리 연산자&& 이러한 모든 시나리오

if (b[0] && b[1] | b[2]) 

if (b[1] && b[0] || b[2]) 

if (b[1] && b[0] || b[2]) 

이유 '& &'코드로서 작동하지 않는 경우,이 블록의 내부에 도달 단락 논리?

논리 연산자가 어떤 순서로 실행되는지 설명하십시오.

+0

* "왜 '&&'가 작동하지 않는 논리가 * * - 예상 한대로 작동 하는지를 보장 할 수 있습니다. 실제 기대치는 기대치와 다를 수 있습니다. 무슨 일이 일어나고있는 대신에 무엇을 기대합니까? – luk2302

+0

귀하의 코드 (및 Google에서 첫 번째 결과)가 표시되면 순서는 && then ||입니다. 바로 가기는 부울 논리의 결과를 변경하지 않습니다. – NickL

+0

코드가 기대하는 바는 무엇입니까? 귀하의 코드는 실제로 무엇을합니까? 즉 어떤 출력을 기대합니까? 그리고 어떤 출력을 얻습니까? 문제를 설명하기 위해 필요한 것보다 코드가 훨씬 복잡합니다. 코드를 [mcve]로 줄일 수 있습니까? – Dukeling

답변

0

왜 '& &'는 코드로 작동하지의 짧은 회로 논리는 경우 블록 내부에 도달 입니까?

단락 논리가 잘 작동합니다. 두 번째 if 문에 도착하기 전에 count은 3이며, 제대로 ++count을 처리하지 않고 논리 연산자가 실행되는 어떤 순서로도 설명해주십시오 3.

에 그것을 떠난다.

The order is :

비트 AND &
비트 배타적 OR^
비트 포함 OR |
논리적 AND & &
논리적 OR ||