我正在研究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;
}
}
输入任何数字后按回车键,无效。我的假设是程序在某个地方不断循环而且必须被打破。
答案 0 :(得分:4)
你在这里有无穷无尽的循环:
for(int k = i*2; k < maxNum; k = k + i)
i
为0,k
为0,因此每一步k=0+0
答案 1 :(得分: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);
}
}
}
第一次迭代(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);
你必须自己学习:(