0

我有以下代码

    public void makeBaby() {
    String duplicate;
    boolean full = false;
    boolean same = false;
    for (int i = 0; i < park.length; i++) {
        if (park[i] == null) {
            full = false;
        } else if (i == park.length - 1 && park[i] != null) {
            full = true;
        }
        if (i != park.length - 1) {
            for (int j = 1; j < park.length; j++) {

                if (park[i].name.equals(park[j].name)) {
                    same = true;
                    duplicate = park[i].name;
                }
            }
        }
        if (!full) {
            System.out.println("The zoo is full. Cannot make any more babies");
        } else if (!same) {
            Animal duplicate = new Animal((float) 0.1 * park[i].mass,park[i].name, park[i].legs);
            addAnimal(duplicate);
        }
    }
}

正如在代码中可能看到的那样,我必须查看名为 park 的数组是否已满,如果没有,我需要制作一个婴儿动物。但在此之前,我还需要检查是否有 2 种动物具有相同的类型(名称)。

但是我遇到了线路问题

Animal duplicate = new Animal((float) 0.1 * park[i].mass,park[i].name, park[i].legs);
        addAnimal(duplicate);

因为不知何故java无法将重复项识别为我在上面的if语句中设置的重复项。

它只是在创建一种叫做重复的动物,这不是我想做的。

4

4 回答 4

0

还有一些其他的东西没有加起来。例如:

full 被声明为假。在第一个 if 语句中:

    if (park[i] == null) {
        full = false;

这是已知的。

如果我没有记错的话:

    (!full) 

被读取为 false 并且意味着在 full = true 时执行。

    (full)

(!same) 也是如此

我不是编码天才,如果我错了,请纠正我。:)

于 2013-11-07T19:25:45.490 回答
0

您有两个变量,每个变量都命名为重复,我怀疑这会让您感到困惑。

你有变量

 String duplicate;

你有

 Animal duplicate

你的意图是什么?它们是不同的类型。

我怀疑你的意思是:

 Animal theNewBaby ...
 addAnimal(theNewBaby);

在某个地方,您打算将新婴儿的名字作为您存储的重复字符串。由于我们看不到我们不知道的 Animal() 构造函数。

于 2013-11-07T14:40:42.107 回答
0

您在这里有多个问题...其中一个您有两个重复的变量...一个字符串和一个动物。因此,根据您的 addAnimal() 方法采用的参数,您可能会抓取错误的副本。

其次,我不相信您的“相同”代码检查会起作用,因为您在同一个列表中循环两次。除非您从第二个 j 循环中排除第一个找到的动物,否则即使只有一个动物,您也总是会找到匹配项。

这可能适用于变形虫,但不适用于大象!:-)

于 2013-11-07T14:49:30.107 回答
0

你只需要重命名你的变量duplicate(例如sDuplicate使用类型作为前缀),如果你想给出你在 if 语句中设置addAnimal()的字符串,没有其他方法。duplicate并添加到 if 条件:

&& i!=j

那么您的重复检查将起作用。

于 2013-11-07T14:53:03.167 回答