当前位置: 首页 > 知识库问答 >
问题:

Java setter不更新值

敖毅
2023-03-14

我正在尝试制作一个菜单系统,其中某些属性的值将在另一个类中更新。

第一种方法

 public static void startmenu(){ 
        int path;
        Scanner startscan = new Scanner(System.in); 
        System.out.println("-----------------------");
        System.out.println("Enter Shop : 1"); 
        System.out.println("Enter house : 2"); 
        System.out.println("Enter town square : 3"); 
        System.out.println("Leave town : 4"); 
        System.out.println("Check stats : 5"); 
        System.out.println("Chosen path: "); 
        System.out.println("update defence : "); 
        path = startscan.nextInt(); 
        SouthValley(path); 
    }

第二种方法与上面相同,案例6应将防御更新为50并重新启动菜单,但当我在打印25后选择案例5时

public static void SouthValley(int selectedPath){
    MainChar Stats = new MainChar();
    do {
        switch(selectedPath){
            case 1: 
                System.out.println("You Entered shop");
                System.out.println("-----------------------------");
                break;
            case 2: 
                System.out.println("You Entered you house");
                break;
            case 3: 
                System.out.println("You Entered Town Square");
                break;
            case 4:
                System.out.println("You left the town");
                FirstPath();
                break;
            case 5:
                System.out.println("--------------------------------");
                System.out.println("Defence: " + Stats.getDefence());
                System.out.println("Strength: " + Stats.getStrength());
                System.out.println("Mana: " + Stats.getMana());
                System.out.println("Health: " + Stats.gethealth());
                startmenu();
                break;
            case 6:
                Stats.setDefence(50);
                System.out.println(Stats.getDefence());
                startmenu();
                break;
            default:
                startmenu();
                break;
        }
    }
    while(selectedPath < 7);
}

具有定义变量的类

public class MainChar {
    private int health = 100;
    private int defence = 25;
    private int strength = 15;
    private int mana = 10;

    public int gethealth(){
        return health;
    }

    public int getStrength() {
        return strength;
    }

    public int getDefence() {
        return defence;
    }

    public int getMana() {
        return mana;
    }

    public void setDefence(int Newdefence) {
        this.defence = Newdefence;
    }

    public void setHealth(int Newhealth) {
        this.health = Newhealth;
    }

    public void setMana(int Newmana) {
        this.mana = Newmana;
    }

    public void setStrength(int Newstrength) {
        this.strength = Newstrength;
    }
}

我已经尝试了很多谷歌搜索,但没有找到解决方案。这段代码只是试图让值更新工作。

共有1个答案

董嘉祯
2023-03-14

循环每次都会创建一个新的主字符。这些对象中的每一个都有自己的 int 存储作为防御。如果您创建一个新的而不是使用您之前创建的那个,它将创建一个默认值为 25 的新 Mainchar。这就是为什么你得到 25 而不是 50。

 类似资料:
  • 我有一个大 gui 的 JList,我删除了所有其他不相关的代码。我可以初始化列表,但在使用按钮时无法从中添加/删除项目。我读到的所有内容都说要使用DefaultListModel。然后,当您重新初始化列表时,它将自动更新列表。 我也尝试重新聚焦并重新粉刷面板和框架,但这也不起作用。

  • 我找到了更新数据的示例,但它使用了DefaultTableModel。当我创建自己的TableModel和自己的data类时,当我将数据添加到JTable中时,它不会更新。 有我的桌子模型: 当我添加了任何信息,但它没有更新。在JTable中,我必须把这个方法放在哪里来进行正确的数据更新?

  • 问题内容: 我正在通过ng-repeat循环渲染数据。而且我希望它在更新数组时进行更新。从我阅读的内容来看,这应该会自动发生,但是这是行不通的。那我在做什么错? 的HTML: 控制器(此功能通过ng-click在按钮上触发): Console.log显示该数组已正确更新,但是我视图中的表未更改。我不知道我在做什么错。 问题答案: 那是因为您在method中更改了数组引用。 为了避免这种情况,我们使

  • 我现在迷路了。

  • 问题内容: 有点奇怪,我正在使用JavaFX 8,并且在Jubula测试期间发现了一些奇怪的行为。 我有一个使用以下代码创建的datepicker控件: 效果很好,控件在窗体上创建并按预期工作。如果我使用日历来选择日期,则值会更新。 现在,对于奇怪的部分,如果我输入日期选择器并在(例如2017/10/11)中手动键入日期,然后通过制表符或单击表单上的下一个文本框来退出控件,则日期选择器locald

  • 我正在尝试使用DidMount中的localStorage值更新状态,但它没有更新: 在第一个console.log中,我的值为1,在第二个中,它保持为空,不更新状态。