本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

方法没有完成运行 - 无限运行

发布于2024-10-30 02:06     阅读(1040)     评论(0)     点赞(11)     收藏(4)


我尝试编写简单的程序并在某个时刻陷入 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;
    }
}
  • 如何解决这个烦恼呢?

解决方案


你的射击方法不正确,它不断地将机器人设置为彼此的撞击值。

我想你更想减去机器人力量的影响。

类似于

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;
}


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/690883/a5463a022178e88d1845/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

11 0
收藏该文
已收藏

评论内容:(最多支持255个字符)