我很抱歉(另一个)公认的是非常基本的问题,但我在一些Java代码中遇到了更多问题,我必须在课堂上找对。赋值是对Eratosthenes程序进行筛分,虽然我的构造函数似乎有效(从myArray[50]
方法调用main
给出了它初始化的值),但它没有反映出任何变化其他课程是为了myArray
。此外,print()
不打印任何内容(可能是因为该函数看到了myArray
的统一版本。)。
目标是SieveEm()和deleteStuff()将所有非素数标记为false,print()来自并打印所有素数(标记为true)。
我似乎无法在互联网/ StackOverflow上找到解决问题的任何内容。我做错了什么?
public class Sieve {
private int count;
private boolean[] myArray;
public Sieve(int length){
count = length+1;
boolean[] newArray = new boolean[length+1];
if(length>=1){
newArray[0]=false;
newArray[1]=false;
if(length>=2){
for(int i=0;i<=length;i++){
newArray[i]=true;
}
}
}
this.myArray = newArray;
}
public void SieveEm(){
System.out.println("here now");
System.out.println(this.myArray[50]==true);
for(int i=0; i<count;i++){
System.out.println("We got this far");
if(this.myArray[i]){
deleteStuff(i);
}
}
}
public void deleteStuff(int current){
int increment= current;
current+=increment;
while(current<count){
this.myArray[current]=false;
current+=increment;
}
}
public void print(){
this.SieveEm();
for(int i=2;i<count;i++){
if(this.myArray[i]){
System.out.println(i);
}
}
}
public static void main(String[] args){
Sieve mySieve = new Sieve(100);
mySieve.print();
System.out.println(mySieve.myArray[50]);
}
}
答案 0 :(得分:2)
对于任何有问题的方法,我会逐个方法,因为似乎有一点需要纠正。
对于public void deleteStuff(int current),
,这int increment= current; current+=increment;
似乎相当多余且有害,因为increment
没有做任何特别的事情。更重要的是,您的while - loop
永远不会终止,因为第一次通过current = 0;
和increment = 0;
。如果您执行current++;
,则while-loop
将终止。此外,如果while循环确实进行并通过数组,则所有真值都将设置为false。
到print()
。此方法不会打印任何内容,因为您将整个myArray
设置为false。当然,由于前面提到的while-loop
问题,我永远无法打印for-loop
,因为你陷入了永无止境的while-loop.
所以,如果你解决了while - loop
问题,你将数组中的每个元素设置为false,以便下面的语句永远不会执行。
if(this.myArray[i])
{
System.out.println(i);
}
如果我发现任何其他事情,我会告诉你。