我正在使用PrimeSieve的arraylist实现,并且已经编写了所有代码,但是似乎没有运行,所以我不确定是否是因为循环不好或因为我设置了错误的扫描仪。
这是代码。
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键后,任何操作均无效。我的假设是该程序不断在某处循环,因此必须将其破坏。
有你的问题:
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);
}
}
}
第一次迭代(i = 0):
for (int k = 0 * 2; k < maxNum; k = k + 0)
就像是 :
for (int k = 0 ; k < X ; k = k + 0 )
修理它 :)
关于您的问题...这很容易(使用debug :)):
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);
您必须自己学习:(
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句