数组隐私 Java - 基本

Array Privacy Java - Basic

对于(另一个)公认的非常基本的问题,我很抱歉,但我在一些 Java 代码中遇到了更多问题,我必须为 class 正确。任务是对 Eratosthenes 程序进行筛选,虽然我的构造函数似乎有效(从 main 方法调用 myArray[50] 给出了它初始化的值),但它没有反映任何更改其他 classes 是为了 myArray。此外,print() 不打印任何内容(可能是因为该函数看到 myArray. 的单元化版本)。

目标是 SieveEm() 和 deleteStuff() 将所有非素数标记为假,print() 来打印所有素数(标记为真)。

我似乎无法在 internet/Whosebug 上找到任何解决问题的方法。我做错了什么?

    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]);
    }
}

对于任何有问题的问题,我都会逐个方法解决,因为似乎有一点需要更正。

对于public void deleteStuff(int current),,此int increment= current; current+=increment; 似乎相当多余且有害,因为increment 没有做任何特别的事情。更重要的是,你的 while - loop 永远不会终止,因为在第一次传递 current = 0;increment = 0; 时。如果你这样做 current++; 那么你的 while-loop 将终止。此外,如果您的 while 循环确实进行并遍历数组,则所有 true 值都将设置为 false。

进入 print()。此方法不会打印任何内容,因为您将整个 myArray 设置为 false。当然,由于我之前提到的 while-loop 问题,永远不会打印 for-loop 因为你陷入了一个永无止境的 while-loop. 所以,如果你解决了 while - loop 问题,您将数组中的每个元素都设置为 false,因此下面的语句永远不会执行。

if(this.myArray[i]) { System.out.println(i); }

如果我发现任何其他问题,我会通知您。