弄清楚循环错误

时间:2013-12-06 04:32:26

标签: java loops arraylist infinite-loop

所以我遇到了无限循环问题,但我根本找不到它是什么/在哪里。 我有一个名为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

1 个答案:

答案 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());
}