Java库存系统通过索引修改物料名称时索引对应错误问题
问题分析与修复
你的代码核心问题在于编辑模块完全没有使用输入的item_index,而是用增强for循环直接修改了列表的第一个元素就break,这就是为什么输入索引2却修改了第一个物料的原因。另外要注意:你界面显示的Unique_Id是从1开始的(1、2),但Java的List索引是从0开始的,所以需要做索引转换。
修复后的代码(编辑模块)
else if (choice2 == 2) { System.out.println("----------------------"); System.out.println("Edit Materials "); System.out.println("----------------------"); System.out.print("Enter Item index: "); int item_index = scan.nextInt(); // 转换为List的0-based索引 int listIndex = item_index - 1; // 先判断索引是否合法,避免数组越界异常 if (listIndex >= 0 && listIndex < item.size()) { System.out.print("Enter new name of the item: "); String newitem = scan.next(); // 通过索引直接获取对应的物料对象,修改名称 Materials targetItem = item.get(listIndex); targetItem.setItem_name(newitem); System.out.println("Item -> " + targetItem.getItem_name() + " Successfully updated! "); } else { System.out.println("Invalid item index! Please enter a valid index between 1 and " + item.size()); } }
修复说明
- 索引转换:将用户输入的1-based编号(比如界面显示的1、2)转换为List的0-based索引(减1),这样输入2就能定位到List的第2个元素(索引1)。
- 合法性校验:增加索引范围判断,防止用户输入超出列表长度的索引导致
IndexOutOfBoundsException。 - 直接定位元素:用
item.get(listIndex)直接获取目标物料,不需要循环,逻辑更清晰高效。
验证效果
当你输入索引2时,listIndex变为1,对应List中第二个元素(原名称cangoods),修改后再次查看库存,就能看到第二个物料的名称被更新为python,而第一个物料保持不变。
内容的提问来源于stack exchange,提问作者Joven Rey Flores
相关产品推荐
相关产品推荐

