2014-02-06 34 views
0

我正在处理PrimeSieve的ArrayList实现,并且我已经编写了所有代码,但似乎无法运行,所以我不确定是因为循环是坏的还是因为我设置了错误的扫描仪。扫描仪不工作 - Prime筛子。代码已完成

这是代码。

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; 


} 

} 

一旦我输入任何数字,然后按回车,什么都不起作用。我的假设是,该计划不断在某处循环,并且必须被打破。

+0

有什么问题是什么呢?编译错误?例外?什么都没有发生?错误的结果...? – amit

+1

你输入了什么(**和**回车)?我问这个,因为你没有提供任何示例输入和输出。 – skiwi

+0

将一些System.out.println()调用添加到循环中以确保它们已执行。或者使用调试器。 –

回答

1

还有就是你的问题:

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 = 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 k = i*2; k < maxNum; k = k + i) 

i是0和k为0,因此每一步k=0+0

+0

Yeap,这是问题的答案,在另外BL.set(i,false)应该是BL.set(k,false)。 – amit

+0

该死的,我知道我错过了一些东西。谢谢! 你如何解决这个问题?我正在抓我的脑袋...... – Tuskaugur