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

Java表格值增量逻辑异常:首条记录后重复新增行且执行增量

表格数据操作逻辑异常排查与修复

问题现象

首次向表格插入记录时功能正常,符合预期逻辑:

  • 表格为空时插入新行
  • 输入的条码(barcode)与已有记录的bcode_txt匹配时,仅增加对应记录的数量
    但插入首条记录后,后续操作会同时触发增量操作和新增重复行,出现功能异常。

待排查代码

private void jBCodeKeyPressed(java.awt.event.KeyEvent evt) {

    if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
        DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
        int numofrows = jTable1.getRowCount();
        if (numofrows == 0) {
            insert_row();
        }
        if (!(numofrows == 0)) {

            for (int i = 0; i < numofrows; i++) {
                int c_bcode = Integer.parseInt(model.getValueAt(i, 2).toString());
                int bcode_txt = Integer.parseInt(jBCode.getText());
                if (bcode_txt == c_bcode) {
                    int curr_qty = Integer.valueOf(model.getValueAt(i, 3).toString());
                    String entered_qty = p_qty.getText();
                    Double up = Double.parseDouble(p_u_price.getText());
                    int q = Integer.parseInt(entered_qty);
                    Double tp = q * up;
                    model.setValueAt(tp, i, 6);
                    q += curr_qty;
                    model.setValueAt(q, i, 3);
                } else if (!(bcode_txt == c_bcode) && (!(numofrows == 0))) {
                    insert_row();
                }
            }
        }
    }
}

问题原因

  1. 循环内的错误触发逻辑:遍历已有行时,只要某一行条码不匹配就执行新增行操作,哪怕已经找到匹配行完成增量,后续不匹配的行仍会触发新增,导致重复行出现。
  2. 缺少匹配状态标记:没有变量记录是否找到匹配项,无法在遍历结束后统一判断是否需要新增行。

修复方案

添加布尔变量标记匹配状态,遍历完成后再决定是否插入新行:

private void jBCodeKeyPressed(java.awt.event.KeyEvent evt) {

    if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
        DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
        int numofrows = jTable1.getRowCount();
        boolean isMatched = false; // 标记是否找到匹配条码
        int bcode_txt = Integer.parseInt(jBCode.getText()); // 提前解析,减少重复操作

        if (numofrows == 0) {
            insert_row();
        } else {
            for (int i = 0; i < numofrows; i++) {
                int c_bcode = Integer.parseInt(model.getValueAt(i, 2).toString());
                
                if (bcode_txt == c_bcode) {
                    isMatched = true;
                    int curr_qty = Integer.valueOf(model.getValueAt(i, 3).toString());
                    String entered_qty = p_qty.getText();
                    Double up = Double.parseDouble(p_u_price.getText());
                    int q = Integer.parseInt(entered_qty);
                    Double tp = q * up;
                    model.setValueAt(tp, i, 6);
                    q += curr_qty;
                    model.setValueAt(q, i, 3);
                    break; // 找到匹配后直接退出循环,避免无效遍历
                }
            }
            // 仅在遍历完所有行都无匹配时,才插入新行
            if (!isMatched) {
                insert_row();
            }
        }
    }
}

修复说明

  • 新增isMatched变量,统一管理匹配状态
  • 将条码解析移到循环外,提升代码执行效率
  • 找到匹配行后立即终止循环,减少不必要的遍历
  • 遍历结束后统一判断是否新增行,避免重复触发插入操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:25:27