我试着编写简单的程序,并在某些时候停留在while循环中。
从当前输出中我看到它只打印相同的数据。
但它应该在每次迭代时执行。
代码片段:
public void fight(Droid first, Droid second) {
while (first.isAlive() & second.isAlive()) {
if ((random.nextInt(10) + 1) % 2 == 0) {
shoot(first, second);
} else {
shoot(second, first);
}
// testing output
System.out.printf("Droid %s has %d power level%n", first.getName(), first.getPower());
System.out.printf("Droid %s has %d power level%n", second.getName(), second.getPower());
}
if (first.getPower() <= 0) {
fightResult(second);
} else {
fightResult(first);
}
}
这是输出:
Droid John has 5 power level
Droid Dik has 8 power level
Droid John has 5 power level
Droid Dik has 8 power level
Droid John has 5 power level
Droid Dik has 8 power level
Droid John has 5 power level
Droid Dik has 8 power level
我犯了一些愚蠢的错误,找不到一个。
更新
这里是shoot()
:
private void shoot(Droid first, Droid second) {
second.setPower(first.getImpact());
}
和Droid
类:
public abstract class Droid {
protected Random random;
private String name;
private int power;
private int impact;
public Droid(int aPower, int anImpact) {
power = aPower;
impact = anImpact;
}
public String getName() {
return name;
}
public void setPower(int aPower) {
power = aPower;
}
public void setImpact(int anImpact) {
impact = anImpact;
}
public int getPower() {
return power;
}
public int getImpact() {
return impact;
}
public abstract void fight(Droid first, Droid second);
public boolean isAlive() {
boolean result = false;
if (this.getPower() > 0) result = true;
return result;
}
}
答案 0 :(得分:3)
你的射击方法不正确,它会不断设置机器人的撞击值。
我怀疑你想要减去机器人力量的影响。
的内容
private void shoot(Droid first, Droid second) {
second.setPower(second.getPower() - first.getImpact());
}
或更多OO风格:
first.shoot(second);
public void shoot(Droid second) {
second.absorbImpact(getImpact());
}
public void absorbImpact(int impact) {
power -= impact;
}
答案 1 :(得分:0)
您必须为其中一个Droids调用setAlive(false)来结束无限循环... 拍摄时你将第二个Droid的力量设置为第一个Droid的影响力。但你永远不会降低机器人的影响......
答案 2 :(得分:0)
试
private void shoot(Droid first, Droid second) {
second.setPower(second.getPower() - first.getImpact());
}
答案 3 :(得分:-1)
你似乎正在使用&amp; (按位运算符)而不是&amp;&amp; (布尔和)
答案 4 :(得分:-1)
改变这个:
while (first.isAlive() & second.isAlive())
到这个
while (first.isAlive() && second.isAlive())