2014-02-06 2 views
0

나는 PrimeSieve의 arraylist 구현 작업 중이며 모든 코드를 작성했지만 실행되지 않는 것 같아서 루프가 좋지 않거나 스캐너를 잘못 설정했기 때문에 확실하지 않습니다.스캐너가 작동하지 않습니다 - Prime Sieve. 코드가 완료되었습니다

다음은 코드입니다.

import java.util.Scanner; 
import java.util.ArrayList; 


public class PrimeSieve { 

public static void main(String[] args) 
{ 
    int inputNum; 
    Scanner SL = new Scanner(System.in); 
    System.out.print("Pick a number to count up from:"); 
    inputNum = SL.nextInt(); 
    ArrayList<Boolean> BL = findPrime(inputNum); 
    System.out.println("The prime numbers found:"); 
    for(int i = 0; i < inputNum; i++) 
    { 
     if(BL.get(i) == true) 
     { 
      System.out.println(i + ", "); 
     } 
    } 
} 

public static ArrayList<Boolean> findPrime(int maxNum) 
{ 
    ArrayList<Boolean> BL = new ArrayList<Boolean>(); 


    //Filling in the list. 
    for(int i = 0; i < maxNum; i++) 
    { 
     BL.add(true); 

    } 

    for(int i = 0; i * i <(maxNum); i++) 
    { 
     if(BL.get(i) == true) 
     { 
      for(int k = i*2; k < maxNum; k = k + i) 
      { 
       BL.set(i, false); 
      } 
     } 

    } 
    return BL; 


} 

} 

숫자를 입력하고 Enter 키를 누르면 아무 것도 작동하지 않습니다. 내 가정은 프로그램이 끊임없이 어딘가에 반복되고 그것이 깨져 있어야한다는 것입니다.

+0

문제가 정확히 무엇입니까? 컴파일 오류? 예외? 그냥 아무 일도 일어나지 않아? 잘못된 결과 ...? – amit

+1

아무 것도 입력하지 않으셨습니까? (** 및 ** hit ENTER)? 당신이 예제 입출력을 제공하지 않았기 때문에 나는 이것을 묻고있다. – skiwi

+0

일부 System.out.println() 호출을 루프에 추가하여 루프가 실행되는지 확인하십시오. 또는 디버거를 사용하십시오. –

답변

1

있다 0) :

for (int k = 0 * 2; k < maxNum; k = k + 0) 

의 같은 :

for (int k = 0 ; k < X ; k = k + 0) 

수정이이 문제에 대해

를 :) ... 그것은 쉬운 사람 (사용 디버그 :))입니다 :

for (int i = 2; i * i < (maxNum); i++) { 
    if (BL.get(i) == true) { 
     for (int k = i * 2; k < maxNum; k = k + i) { 
      BL.set(k, false); 
     } 
    } 

} 

변경 :

int i = 2; 

BL.set(k,false); 

당신은 스스로를 배워야한다 :(

+0

지금은 모두 고쳐졌지만 분명히 내 코딩에 문제가있다. 목록의 거의 모든 항목이 소수에 나온다. – Tuskaugur

4

현재 루프 네버 앤딩 한 :

for (int i = 0; i * i < (maxNum); i++) { 
    if (BL.get(i) == true) { 
     for (int k = i * 2; k < maxNum; k = k + i) { 
      BL.set(i, false); 
     } 
    } 
} 

먼저 iteraction (I =

for(int k = i*2; k < maxNum; k = k + i) 

i가 0이고 k이 0 인 것은 그래서 당신의 문제를 모든 단계 k=0+0

+0

예, 이것은 질문에 대한 답변입니다. 또한 BL.set (i, false)는 BL.set (k, false)이어야합니다. – amit

+0

젠장, 나는 뭔가를 놓친다는 것을 알았다. 감사! 어떻게 해결할 것이라고 제안 하시겠습니까? 나는 내 뇌를 긁어 모으고있다 ... – Tuskaugur

관련 문제