我有以下代码
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语句中设置的副本。
它只是创造了一种叫做复制的动物,这不是我想做的......
答案 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)
同样适用于(!相同)
我不是编码天才,如果我错了,请纠正我。 :)