2010-03-03 3 views
2

여기서 내가 뭘 잘못하고 있니?간단한 부울 질문

6이나 7로 나눌 수있는 1에서 100까지의 정수를 표시하고 싶습니다. 다음 단계는

for (int i = 1; i < 100; i++) 
    if (i % 6 == 0 || i % 7 == 0 && i % (6 * 7) != 0){ 
     println(i); 
    } 

감사합니다 (그 정수는 여전히 표시된다) 그건 내 루프 작동하지 않습니다 ... 모두로 나눌 수 있습니다 그 중 하나를 표시하지 않는 것입니다! 조엘

+0

Java 운영자 우선 순위 : http://java.sun.com/docs/books/tutorial/java/nutsandbolts/operat ors.html # nutsandbolts-precedence –

+0

차가움. 감사! 실수로 괄호를 쓰지 않고 내 머리 속에있는 세 가지 주장을 분리했다. – Joel

+0

당신은'http : //www.joelonsoftware '와 같은 조엘이 아니다.com /', right –

답변

5

과 같이, (...) 추가하여 조건이 더 명확하게하려고 : 기본 & &으로


if (((i % 6 == 0 || i % 7 == 0) && (i % (6 * 7) != 0)) { 
} 

이 우선 점거 ||

+1

일반적으로 논리 연산자의 평가 또는 "끈적임"에 대해서는 아무 것도 생각하지 않고 언제나 (...) – radai

+0

을 추가합니다. 고마워요! – Joel

3

누락 괄호 :

for (int i = 1; i < 100; i++) { 
    if ((i % 6 == 0 || i % 7 == 0) && i % (6 * 7) != 0) { 
     println(i); 
    } 
} 
+0

고마워 - 그랬어! – Joel

1
for (int i = 1; i < 100; i++) 
if ((i % 6 == 0 || i % 7 == 0) && !(i % 6 == 0 && i % 7 == 0)){ 
    println(i); 
} 
+1

이것은 컴파일되지 않습니다! '(i % 6 == 0 || i % 7) == 0'은'(i % 6 == 0 || i % 7 == 0)'여야합니다. –

+0

그 – objects

2
단순히 같은 우선 순위를 평가하고 사용하는 방법에 대해 걱정 중지 할

: 나는 1-100 이었다는 것을 여기에 있으리라 믿고있어

for (int i = 1; i <= 100; i++) { 
    if ((i % 42) == 0) continue; 
    if ((i % 6) == 0) println (i); 
    if ((i % 7) == 0) println (i); 
} 

을 포함 된 범위 인 경우 < 대신 <=을 사용해야합니다. 100이 6이나 7로 나눌 수 없기 때문에 귀하의 구체적인 경우는 중요하지 않습니다.

맞춰보세요. 적절한 최적화 컴파일러 (JIT 포함)는 결국 다른 모든 가능성과 동일한 코드를 생성하게됩니다. 그리고 비록 그렇지 않더라도,이 함수를 큰 숫자로 호출하지 않는 한 상관 없습니다. 번. 또는, 더 나쁜 아직, 당신이해야 리스프 같은 것은이

:-) 제대로 작동 얻을 그것을로 설정하는

if (i % 6 == 0 || i % 7 == 0 && i % (6 * 7) != 0) ... 

을 :

나는 그 작은 조금 더 읽기보다는 생각


염두에 하나의 가능성을 유지 - 당신이 6, 7 특정한 경우에, (일곱)가보다 효율적으로 만들기 위해 루프를 변경할 수 있습니다, 따라서 :

for (int i = 7; i <= 100; i += 7) 
    if ((i % 6) != 0) 
     println (i); 

이 7 만 체크 배수에 for 루프 자체를 사용하고 그들이 하지도 6

2

의 배수는 또한 독점 또는

for (int i = 1; i < 100; i++) { 
     if ((i % 6 == 0)^(i % 7 == 0)) { 
      println(i); 
     } 
    } 

또는 단지를 사용할 수 있다면 그들을 인쇄 불평등 if ((i % 6 == 0) != (i % 7 == 0))
자주 사용되지 않으므로 코드 가독성이 높아질 수 있습니다.