所以我遇到了无限循环问题,但我根本找不到它是什么/在哪里。
我有一个名为arrayList
的{{1}}填充了任一类的对象
Goodguy Badguy Person或NormalGuy 。在我的删除机制下面,如果坏人的一边有一个普通人/人,我删除那个人/ normalguy。
如果双方都有一个普通人/人,我会随机删除其中一个。也,
每次我删除一个,我随机将另一个人/普通人从dailyplanetstreet移动到另一个称为安全土地的arraylist。
这是我目前的输出:
dailyPlanetStreet
代码:
normal guy
normal guy
person
badguy
normal guy
goodguy
normal guy
person
person
person
yo
normal guy
normal guy
person
badguy
goodguy
normal guy
person
person
person
答案 0 :(得分:1)
我可以看到的一个问题是你有以下方法:
public static void rescue() {
int goodpos=0;
int randompos=(int)(Math.random()*dailyPlanetStreet.size());
for (int counter1=0; counter1<dailyPlanetStreet.size(); counter1++){
if (dailyPlanetStreet.get(counter1).name()!="Kent Clark") {counter1=goodpos;}
}
dailyPlanetStreet.add(randompos,dailyPlanetStreet.remove(goodpos));
}
在上面,每当名字不是“Kent Clark”时,你就会将counter1
设置回零。您可能打算在goodpos = counter1;
子句中使用if
。另外,请勿使用==
或!=
来比较String
值,而应使用.equals()
。
因此上面应该是:
public static void rescue() {
int goodPos = 0;
int randomPos = (int)(Math.random() * dailyPlanetStreet.size());
for (int counter1 = 0; counter1 < dailyPlanetStreet.size(); counter1++) {
if (!"Kent Clark".equals(dailyPlanetStreet.get(counter1).name())) {
goodPos = counter1;
}
}
dailyPlanetStreet.add(randomPos, dailyPlanetStreet.remove(goodPos));
}
这会在街上找到最后一位非超人,并将其移动到随机位置。如果你想找到第一个,你应该使用break
离开循环。
此外,由于您经常检查对象的名称是否为Clark Kent,请使用辅助方法来干燥(不要重复自己)代码并提高可读性:
private boolean isClarkKent(Person person) {
return "Kent Clark".equals(person.getName());
}