You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为MouseListener传参?汉诺塔JLabel点击显示结果异常问题

解决汉诺塔计算结果始终为0的问题

我来帮你分析问题根源,以及具体的修复方案:

问题核心原因

你遇到的问题本质是**HanoisFrames类中的input变量没有被正确赋值**:

  • 你在HanoisFrames里定义了static int input,静态变量属于类本身,默认初始值是0,而且构造函数public HanoisFrames(int input)并没有把传入的参数值赋值给这个静态变量。
  • 当MouseHandler里调用hanoiCalculator(input)时,实际使用的是这个默认值为0的静态变量,所以结果永远是0。
  • 你尝试让MouseHandler继承HanoisFrames的做法是错误的:内部类本来就可以直接访问外部类的成员,继承反而会创建一个新的HanoisFrames实例,和当前窗口的实例毫无关联,自然解决不了问题。

具体修复步骤

1. 将静态input改为实例成员变量

打开HanoisFrames类,去掉input的static修饰符,改成实例级别的成员变量(建议加上private修饰符,符合封装原则):

// 替换原来的 static int input;
private int input;

2. 在构造函数中给成员变量赋值

在HanoisFrames的构造函数里,把传入的参数赋值给刚才定义的成员变量:

public HanoisFrames(int input) {
    this.input = input; // 新增这一行,将构造参数赋值给实例变量
    // 以下是你原来的构造代码,保持不变
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 901, 696);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    contentPane.setLayout(new BorderLayout(0, 0));
    setContentPane(contentPane);
    // ... 其余构造代码
}

3. 保持MouseHandler为普通内部类

不需要让MouseHandler继承HanoisFrames,内部类可以直接访问外部类的实例成员变量。你可以选择两种方式修复调用逻辑:

方案A:保留hanoiCalculator带参数的形式

在MouseHandler的mousePressed方法中,传入外部类的实例变量input:

public void mousePressed(MouseEvent e) {
    answer.setText("Answer: " + String.valueOf(hanoiCalculator(HanoisFrames.this.input)));
}

方案B:优化hanoiCalculator为无参数方法

既然input已经是实例变量,让hanoiCalculator直接使用这个变量,去掉方法参数:

public int hanoiCalculator() {
    if (this.input == 0){
        return 0;
    }else if (this.input == 1){
        return 1;
    }else{
        return 2*(hanoiCalculator(this.input - 1)+1)-1;
    }
}

然后在mousePressed里直接调用:

public void mousePressed(MouseEvent e) {
    answer.setText("Answer: " + String.valueOf(hanoiCalculator()));
}

验证修复效果

完成以上修改后,当你点击按钮打开HanoisFrames窗口时,传入的关卡值会被正确保存到实例变量中,点击answer标签时,就会使用正确的input值计算汉诺塔的移动次数了。

内容的提问来源于stack exchange,提问作者user10924919

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:25:48