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

如何解决Java Swing中相邻JTextField乘积仅显示最后结果的问题

问题解决:Java Swing中EARNING字段未正确显示对应组乘积

问题原因分析

你的代码逻辑存在两处核心错误,导致所有EARNING字段只显示最后一组的乘积:

  • 嵌套循环覆盖计算结果:内层循环for(JTextField fields : arr1.subList(i, arr1.size()))会持续用当前TOTAL文本框与POINTS列表中从第i位到末尾的元素相乘,每次都会覆盖summation的值,最终summation仅保留当前TOTAL与最后一个POINTS的乘积。
  • 批量赋值同一结果:最后遍历arr2时,将所有EARNING文本框都设置为同一个summation(即最后一组的计算结果),自然所有字段显示相同值。

修正后的代码

private void calcCredit() {
    try {
        // 校验三组字段数量一致,避免索引越界
        if (arr.size() != arr1.size() || arr.size() != arr2.size()) {
            return;
        }
        // 按索引遍历每组对应的TOTAL、POINTS、EARNING字段
        for (int i = 0; i < arr.size(); i++) {
            JTextField totalField = arr.get(i);
            JTextField pointsField = arr1.get(i);
            JTextField earningField = arr2.get(i);
            
            // 解析数值并计算乘积
            double total = Double.parseDouble(totalField.getText());
            double points = Double.parseDouble(pointsField.getText());
            double earning = total * points;
            
            // 赋值给对应位置的EARNING字段
            earningField.setText(String.valueOf(earning));
        }
    } catch (NumberFormatException ex) {
        // 处理用户输入非数字的情况
        ex.printStackTrace();
        // 可添加提示用户输入合法数值的逻辑,例如:JOptionPane.showMessageDialog(null, "请输入有效的数字");
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

关键改动说明

  1. 取消嵌套循环,按索引一一对应:直接遍历数组索引,确保每组的TOTAL、POINTS、EARNING字段严格匹配,避免无效的多对一计算。
  2. 添加长度校验:防止因三组字段数量不一致导致的索引越界异常。
  3. 细化异常处理:将空catch块改为捕获具体的NumberFormatException,便于调试用户输入错误的场景,同时保留通用异常捕获。
  4. 实时赋值对应字段:每组计算完成后立即将结果赋值给对应的EARNING文本框,保证每组结果独立显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:18:31