2014-12-19 2 views
0

나는 항상 문이 거짓으로 선언 된 경우 boolean valid = false과 같이 !valid을 쓰면 valid이 true가되도록 뒤집을 것이라고 항상 가정합니다. 그러나 이것은 완전히 잘못된 오해였습니까? 예를 들어, 아래 코드에서; 거짓 부울에 대한 not 문 사용

for (int check=3; check <= primeLimit; check += 2) { 
    boolean divisorFound=false; 
    for (int div=3; div<=Math.sqrt(check) && !divisorFound; div += 2) { 
     if (check%div==0) 
      divisorFound=true; 
    } 

divisorFound 검색 루프에 대한 두 번째는 허위의 사실 있나요? 은 제수가 거짓임을 암시하는 경우 때문에 것은 그냥 말을하지 :

div<=Math.sqrt(check) && divisorFound; 
+1

여기서 for 루프는! divisorFound를 검색하여 중지되도록하고 divisorFound를 검색하여 중지하도록합니다. 조언; for 루프는 정확히 n 번 반복되는 것에 전념합니다. 부울 변수를 사용하려면 while 루프가 더 유용합니다. –

+0

@pbabcdefp, 고맙습니다. 바로 그 점을 분명히하고 싶습니다. 너무 사소한 것처럼 보이기 때문에 나는이 질문에 당혹 스럽다. 그러나 이중 부정은 항상 나를 혼란스럽게했다. 그리고이 코드는 루프를 실행하기 위해 divisorFound가 false 여야한다는 것을 암시한다고 생각했지만 단순히 divisorFound를 true로 설정하는 조건이있을 때까지 실행될 것이라고 말하고있었습니다. – kris

+2

괜찮습니다. 간단한 질문에 잘못된 것은 없습니다. 나는 정말로 기본적인 실수를 항상한다. 나는 정말로내는 오류가 포함되어있어서 내 의견을 삭제해야만했다. 변수를 추적하고 진행 상황을 보려면'System.out.println (...)'을 많이 사용하는 것이 좋습니다. 그것은 매우 효과적인 학습 방법입니다. –

답변

5

것은 당신이 코드를 작성하지 않은 가정하고있어 그 목적은 무엇을 이해하기 위해 노력하고 있습니다. 내부 루프는 제수가 발견 될 때까지 계속되어야합니다. 따라서 이 true으로 평가되는지 반복적으로 확인합니다. 즉, "이 아니며이 아직 발견되지 않았습니까?"

은 제수가 발견되면,이 divisorFoundtrue로 설정하고, 루프를 중지 할 수 있도록 표현 !divisorFoundfalse 평가. 당신이 제시 한 조건 검사가 사용 된 경우

: 루프 본체에 도달하지 않을 것

div<=Math.sqrt(check) && divisorFound 

. divisorFoundfalse으로 시작해야하므로 계속 조건이 즉시 실패하고 루프가 종료됩니다.

1

divMath.sqrt(check)보다 작고 제수가 발견되지 않으면 두 번째 루프가 루핑을 계속한다고 말합니다. divisorFound이 true로 설정되면 내부 루프가 해당 조건을 실패합니다.

나는 이것이 꽤 직선적 인 부울 조건이므로 코드를 잘못 읽었을 것입니다.