Java商品选购程序无序选择商品时报错问题求助
Java商品选购程序问题修复方案
核心问题
addD方法错误地在数组末尾追加元素,而非对应商品的索引位置更新数量,导致无序选择时出现数组越界异常。- 重复选择同一商品时未做数量累加,无法实现合并总计的需求。
- 循环逻辑冗余,Scanner对象重复创建,造成资源浪费。
修复方案
- 初始化
quantity数组时,直接与name数组长度保持一致,所有元素初始化为0,确保每个商品对应固定的索引位置。 - 删除
addD方法,通过商品编号计算对应索引,直接对quantity数组的对应位置进行数量累加。 - 优化循环结构,Scanner对象仅创建一次,明确结账触发条件(输入大于商品总数的数字即可结账)。
修改后的完整代码
import java.util.Scanner; public class ProductSelector { // 示例商品名称数组,可根据实际需求修改 private static String[] name = {"商品1", "商品2", "商品3"}; // 初始化数量数组,与商品名称数组长度一致,初始值为0 private static double[] quantity = new double[name.length]; public static void main(String[] args) { Scanner myObj = new Scanner(System.in); int ItemNumber; double ItemQuantity; do { System.out.println("请选择商品编号(输入大于" + name.length + "的数字结账):"); ItemNumber = myObj.nextInt(); if (ItemNumber >= 1 && ItemNumber <= name.length) { System.out.println("请输入购买数量:"); ItemQuantity = myObj.nextDouble(); // 对应商品索引位置累加数量 quantity[ItemNumber - 1] += ItemQuantity; String ItemName = name[ItemNumber - 1]; System.out.println("\n客户选购了 " + Math.round(quantity[ItemNumber - 1]) + " 件 " + ItemName + "\n"); } else if (ItemNumber <= 0) { System.out.println("输入无效,请输入正确的商品编号或结账数字"); } } while (ItemNumber <= name.length); // 打印最终选购清单 System.out.println("=== 最终选购清单 ==="); for (int i = 0; i < name.length; i++) { if (quantity[i] > 0) { System.out.println(name[i] + ":" + Math.round(quantity[i]) + "件"); } } myObj.close(); } }
说明
- 无论用户选择商品的顺序如何,都能通过索引直接定位到对应商品的数量位置,不会出现数组越界。
- 重复选择同一商品时,会自动累加数量,满足合并总计的需求。
- 增加了最终选购清单的打印,方便查看所有已选商品及数量。
内容的提问来源于stack exchange,提问作者ATSpiro
相关产品推荐
相关产品推荐

