【问题标题】:Array Privacy Java - Basic数组隐私 Java - 基本
【发布时间】:2015-04-02 23:51:32
【问题描述】:

对于(另一个)公认的非常基本的问题,我很抱歉,但我在一些 Java 代码中遇到了更多问题,我必须在课堂上解决这些问题。任务是筛选 Eratosthenes 程序,虽然我的构造函数似乎可以工作(从 main 方法调用 myArray[50] 给出了它被初始化的值),但它没有反映其他类的任何更改旨在使myArray。此外,print() 不打印任何内容(可能是因为该函数看到了 myArray 的统一版本。)。

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

我似乎在 Internet/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]);
    }
}

【问题讨论】:

  • 你能解释一下“你期望发生的事情”和“正在发生的事情”之间的区别吗?
  • 顺便说一句,但如果 SieveEm() 是一种方法,那么您应该以小写字母开头。

标签: java arrays privacy


【解决方案1】:

我会逐个解决任何有问题的地方,因为似乎有一点需要纠正。

对于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 问题,你将每个元素都设置在数组为假,所以下面的语句永远不会执行。

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

如果我注意到其他任何事情,我会告诉你。

【讨论】:

  • 谢谢!我知道它应该只是 this.myArray[50],我只是变得偏执并开始做额外的事情以确保安全!
  • @CBlumey 我讨厌有点混蛋,或者任何适用的词,但乔哈奇尼森的第一个答案完全不正确,完全不正确,甚至没有回答你的问题。在我回答你的问题三分钟后,他编辑了他的回答,它神奇地包含了我在回答中提到的问题。您不必选择我的答案作为正确答案,但我要求您按照我在 Joe Hutchinson 之前为您的问题提供正确答案的方式做,并且我没有窃取任何人的答案。
  • @CBlumey 并且可能还对他的答案投了反对票,因为他没有提供他自己发现的答案,而是复制了我的解决方案。
  • 我确实看到了他的第一个答案,尽管我在看到你之前看到了他的第二个答案。我会把你的标记为正确的,因为无论如何它更深入。我不想投反对票,因为我不完全确定。
  • @CBlumey 谢谢。你不必改变你的选择,我只是觉得我的想法被另一个人声称有点恼火。我非常感谢您选择我的作为正确答案,我希望您的程序能够成功。如果您有任何其他问题,可以向我发送评论,并附上指向您下一个问题的链接。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 2016-06-07
  • 2019-01-31
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
相关资源
最近更新 更多