我现在正在学习Java,我有一个关于一个对象的问题,这个对象在程序执行期间被初始化并更改了一个变量.

public class Char {
private String name;
private int skill;
private int defense;
private int life;

private Weapon weapon = Weapon.FISTS;

private Potion potion = null;

所以,我想让这段代码获得被初始化的生命的初始值,但我如何访问它呢?

    public boolean isWeak() {
    return life < this.life * 0.25;
}

因此,该方法位于Char类中.我正在try 让它在低于25%时返回真值.

    while (hero.isAlive() && monster.isAlive()) {
        if (hero.isWeak() && hero.hasPotion()) {
            hero.sip();
        } else if (monster.isWeak() && monster.hasPotion()){
            monster.sip();
        } else {
            System.out.println(monster.isWeak());
            hero.attack(monster);
            if (monster.isAlive()) {
                monster.attack(hero);
            }
            System.out.println();
        }
    }

这是执行程序.所有其他方法都工作得很好,但正如所指出的,它永远不会返回TRUE,因为它不能是本身的四分之一.别介意 fingerprint ,我只是在测试它.

推荐答案

为此,您需要创建第二个变量来存储传递给构造函数的值:

public class Char {
    private String name;
    private int skill;
    private int defense;
    private int initialLife;
    private int life;
    private Weapon weapon = Weapon.FISTS;
    private Potion potion = null;

    public Char(int initialLife //I am excluding all the other parameters you want to pass in
    ) {
        this.life = initialLife;
        this.initialLife = initialLife;
    }
    public boolean isWeak() {
        return life < this.initialLife * 0.25;
    }

}

如你所见,我存储了最初的生命,我从来没有修改过它.因为我修改了life变量,所以不能使用它来跟踪初始值.修改变量是一个 destruct 性的过程,Java没有办法跟踪变量值的历史记录(除非您自己这样做).

Java相关问答推荐

使用联接和分页的SpringBoot Spring数据JPA

Exe4j创建的应用程序无法再固定在任务栏Windows 11上

为什么一个Test的instance?& gt;在构造函数中接受非空对象?

当我已经安装了其他版本的Java时,如何在Mac OSX 14.3.1上安装Java 6?

当返回Mono<;Something>;时,不会调用Mono<;void>;.flatMap

Spring @Value default无法计算表达式

从ActiveMQ Classic迁移到ActiveMQ Artemis需要进行哪些客户端更改?

GetChildren().emoveAll()不会删除 node

如何为JavaFX Spring Boot应用程序制作Windows/MacOS/Linux安装程序

如何在一行中使用Dijkstra中的Java Stream

Java构造函数分支

如何根据配置动态创建N个bean

JXBrowser是否支持加载Chrome扩展?

在Java Spring JPA中插入包含对其他实体的引用的列

使用同步方法中的新线程调用同步方法

javax.crypto-密码对象-提供者服务是如何工作的?

Spring Boot 的 WelcomePageHandlerMapping 在无效的 API 路径上被调用,其中预期出现 404 错误

Hibernate在删除Entity后不会抛出EntityNotFoundException

从 Java 中的列表中删除最后一个元素

将 JSF 2.3 应用程序部署到 Tomcat 9.0.80 时出现异常