繁体   English   中英

返回所有空元素而不是对象元素的数组方法

[英]Array method returning all null elements instead of object elements

我有以下方法的问题。 应该创建一个数组,用对象填充它,然后返回填充的数组。 但是,由于我不知道的原因,返回的数组充满了空值。

 public Rodent[] getRodents(int amount) {
        Random rng = new Random();
        Rodent[] rodentArray = new Rodent[amount];

        for (Rodent r : rodentArray) {
            switch (rng.nextInt(3)) {
                case 0:
                    r = new Mouse(); // Subclass of Rodent
                    break;
                case 1:
                    r = new Gebril(); // Subclass of Rodent
                    break;
                case 2:
                    r = new Hamster(); // Subclass of Rodent
                    break;
                default:
                    r = new Rodent(); // For safety
            }
            System.out.println(r.getName()); // Test command inside the loop. Prints the name of all object correctly.
        }

        for (Rodent r : rodentArray) { // Test loop outside of previous loop.
            System.out.println(r.getName()); // Throws null pointer exception.
        }

        return rodentArray; // Returns null filled array
    }

编辑:

找到了我的答案。 谢谢。 现在,我不再需要像指针一样考虑增强的for循环。

r是循环中的局部变量,在给定迭代之外不存在。 您的代码与下面的代码等效,在下面的代码中,更容易看到在每次迭代结束时r被丢弃:

for (int i = 0; i < rodentArray.length; i++) {
    Rodent r = rodentArray[i];
    //your switch here
}

因此,在您的情况下,您可能应该使用标准的for循环,并用rodentArray[i] = new Mouse();填充数组rodentArray[i] = new Mouse(); 或与其他动物(视情况而定)。

您永远不会将新创建的啮齿动物对象放入数组中。 这是正确的代码-

public Rodent[] getRodents(int amount) {
    Random rng = new Random();
    Rodent[] rodentArray = new Rodent[amount];

    for(int count = 0; count < rodentArray.length; count++) {
            Rodent r;
            switch (rng.nextInt(3)) {
            case 0:
                r = new Mouse(); // Subclass of Rodent
                break;
            case 1:
                r = new Gebril(); // Subclass of Rodent
                break;
            case 2:
                r = new Hamster(); // Subclass of Rodent
                break;
            default:
                r = new Rodent(); // For safety
        }
        rodentArray[count] = r;
        System.out.println(r.getName()); // Test command inside the loop. Prints the name of all object correctly.
    }

    for (Rodent r : rodentArray) { // Test loop outside of previous loop.
        System.out.println(r.getName()); // Throws null pointer exception.
    }

    return rodentArray; // Returns null filled array
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM