2011-11-02 2 views
1

나는 이해하려고 노력하고 있지만 이해할 수없는 약어 또는 코드가 있습니다. ? 코드는 내가 그 프로그래밍 책에서 읽은약어 코드의 단어 형식

double xDistance = x1 - x2 >= 0 ? x1 - x2 : x2 - x1; 
    double yDistance = y1 - y2 >= 0 ? y1 - y2 : y2 - y1; 

입니다 :의 약자 인 경우 ... 다음 그러나 나는 매번 내가 삽입하기 때문에 이러한 단어를 넣어 또는 내가 구문 오류가 몇 가지 코드를 교체 할 경우 .

또한 주어진 어떤 지원 미리

(xDistance <= (w1 + w2)/2 && yDistance <= (h1 + h2)/2) 

바람직 & & 운영자에게

확실히 대체 코드

다음 라인을 작성하기가 둘 이상의 방법.

답변

5

? :if-else 속기이고도록 작동하는 조건 연산자 :

if (x1 - x2 >= 0) 
    xDistance = x1 - x2; 
else 
    xDistance = x2 - x1; 
그러므로

(condition) ? (return this if condition true) : (return this if condition false) 


double xDistance = x1 - x2 >= 0 ? x1 - x2 : x2 - x1; 

는 총점


두번째 라인 :

double yDistance = y1 - y2 >= 0 ? y1 - y2 : y2 - y1; 

이 같은 일이 동일시에 다음 절대 값을 저장하는

if (y1 - y2 >= 0) 
    yDistance = y1 - y2; 
else 
    yDistance = y2 - y1; 


(예. 변위가 아닌 거리)가 xDistanceyDistance입니다. Math.abs(x1 - x2) 등으로 바꿀 수도 있습니다.


왜 다음과 같이 && 연산자를 바꾸시겠습니까?

if (xDistance <= (w1 + w2)/2) 
    if (yDistance <= (h1 + h2)/2) 
     // do something 

편집 : 코멘트에 David에서 언급 한 바와 같이, &&

(xDistance <= (w1 + w2)/2 && yDistance <= (h1 + h2)/2) 

당신이 정말로해야한다면 당신은 수 (이 문을 가정 if에 속함) 단순히 논리 AND입니다. 즉. X && Y의 경우 X이 TRUE이고 Y이 TRUE 인 경우 TRUE입니다.

이 때문에 당신을 활용할 수 단락 첫 번째 조건 (X)이 FALSE 인 경우, 다음 두 번째 평가 프로그램의 아무 소용이없는을, (Y) 표현식이 TRUE 결코 수 있기 때문에 .

+0

"&& 연산자를 바꾸고 싶은 이유는 무엇입니까?"라는 질문에 대해 후속 조치를 취하십시오. '&&'연산자는 논리 연산자와 논리합이다. 불리언 논리를 이해한다면 이것은'(xDistance <= ((w1 + w2)/2))'_and_'(yDistance <= ((h1 + h2)/2))'가 결과는 사실이다. 둘 중 하나가 거짓이면 전체 구문이 거짓으로 간주됩니다. 아마도'&'대신에'&& '를 사용하는 것에 대해 가장 중요한 것은''short circuits' '입니다. 즉 첫 번째 문장이 거짓이면 두 번째 문장은 전혀 평가되지 않습니다. –

+0

@ DavidBrainer-Banker 네, 좋은 설명입니다. – AusCBloke

+0

그런 빠른 답장을 해주셔서 감사합니다. 매우 유용하고 정확했습니다. – Calsolum