2014-01-30 2 views
-11

출력에서 ​​소수 2와 3이 누락되었습니다. 내가 n = 72을 넣을 때프라임에서 2와 3이 누락되었습니다

public static ArrayList<Integer> findPrimes(int n){ 

    ArrayList<Integer> primes = new ArrayList<Integer>(); 

    for (int i = 2; i < n; i++){ 

     for(int x = i - 1; x > 2; x--) 

      if(i % x == 0) 
       break; 
      else if(x == 3 && i != 4) 
       primes.add(i); 
     } 
    return primes; 
} 

, 그것은 좋은 인쇄,하지만 2, 3은 출력되지 않습니다. 나는 그것이 인쇄를 계속하는 이유를 전혀 모른다. 어떤 도움이라도 좋을 것입니다. 아래 그림과 같이.

출력 :

Prime numbers: 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 

감사합니다! 다른 방법이 있다면, 배울 수있는 것을 던져 버리십시오. 고마워요!

답변

4

코드에 문제가 설명되어 있습니다. 두 번째 for 루프는 조건 3이 값 3 이하의 경우 항상 false이기 때문에 한 번 실행되기 전에 종료됩니다.

첫 번째 루프 실행 : i = 2, x = 1, 1은 2보다 크지 않으므로 루프가 실행되지 않습니다. 두 번째 실행 : i = 3, x = 2, 2는 2보다 크지 않으므로 다시 한 번 같은 priblem입니다.

4

편집 : 다시 평가 한 후, 당신의 논리가 조금 떨어져 걸쳐있다 깨달았다 더 좋은 방법은 소수 2를 인쇄하려면 ... N은 체 접근 방법을 사용하는 것입니다. 코드를 실제로 읽어야합니다 :

for (int i = 2; i < n; i++){ 

    for(int x = 2; x <= i; x++) 

     if(i == x) 
      primes.add(i); 
     else if(i % x == 0) 
      break; 
} 

테스트 한 후 제대로 작동하는 것으로 보입니다.

+0

흥미로운 ... 그럼 2를 다른 것으로 대체해야합니까? – Singh2013

+0

예, 위 참조,'2'를'0'으로 바꿔야합니다. –

+0

빠른 답장을 보내 주셔서 감사합니다. 그러나 여전히 동일한 출력을 인쇄합니다. – Singh2013

0

i = 2 또는 3 인 경우 x는 < 2이고 내부 for 루프는 실행되지 않습니다.

나는 2에서 카운트 X를 변경할 것 : 아이폰에

for (int i = 2; i < n; i++){ 
    for(int x = 2; x <= i; x++) 
     if(x == i) 
      primes.add(i); 
     else if (i % x == 0) 
      break; 
    } 
return primes; 

}

타이핑이 밖으로 끔찍한입니다.

0

내부 루프는 2보다 작은 값을 실행하지 않습니다. 따라서 x = 2를 초기화해야합니다. in for 루프에서. 위한

(; < X = I, X = INT 2 X ++)

이보십시오.