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(); } } } } }
问题原因
- 循环内的错误触发逻辑:遍历已有行时,只要某一行条码不匹配就执行新增行操作,哪怕已经找到匹配行完成增量,后续不匹配的行仍会触发新增,导致重复行出现。
- 缺少匹配状态标记:没有变量记录是否找到匹配项,无法在遍历结束后统一判断是否需要新增行。
修复方案
添加布尔变量标记匹配状态,遍历完成后再决定是否插入新行:
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
相关产品推荐
相关产品推荐

