对象:如何使用之前声明的字符串

时间:2013-11-07 14:37:29

标签: java object

我有以下代码

    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 个答案:

答案 0 :(得分:0)

你有两个变量,每个都被称为重复,我怀疑这让你感到困惑。

你有变量

 String duplicate;

你有

 Animal duplicate

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

我怀疑你的意思是:

 Animal theNewBaby ...
 addAnimal(theNewBaby);

在某个地方,你打算将新宝宝的名字改为你一式两份存放的字符串。因为我们无法看到你的Animal()构造函数。我们不知道。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

您只需要重命名变量duplicate(例如sDuplicate,类型为前缀),如果您想要addAnimal()字符串{{1},则没有别的办法你在if语句中设置。并添加到if条件:

duplicate

然后你的重复检查就可以了。

答案 3 :(得分:0)

还有其他一些事情没有加起来。例如:

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

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

已经知道了。

如果我没弄错的话:

    (!full) 

被读作false,意味着在full = true时执行。

    (full)

同样适用于(!相同)

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