Java退货方法陷入死循环求助:重复提示输入商品名称
问题分析与修复方案
死循环的根本原因:无限递归
你的returnProduct方法里犯了一个致命错误——在获取用户输入后,直接调用了returnProduct(returnProd),这会让方法无限递归调用自己。每次调用都会重新执行所有逻辑,包括再次打印输入提示,所以程序会一直循环弹出那句话,根本停不下来。
除此之外还有两个坑:
- 每次调用都新建
Scanner还随手关闭,这会把System.in输入流一起关掉,后续其他地方用Scanner会直接报错。 - 方法参数
name完全没用到,而且不管退货成不成最后都返回null,既浪费参数又不符合方法的返回值预期。
修正后的代码示例
// 假设你的StoreFront里有购物车cart和库存inventory的集合 public SalableProduct returnProduct() { // 建议把Scanner改成类成员变量,避免反复创建和关闭 Scanner scnr = new Scanner(System.in); System.out.println("Enter the name of the product you want to return: "); String returnProdName = scnr.nextLine(); // 先去购物车里找要退的商品 SalableProduct productToReturn = findProductInCart(returnProdName); if (productToReturn == null) { System.out.println("Item not in cart"); return null; } // 执行退货:从购物车移除,放回库存 removeItemFromCart(productToReturn); addItemToInventory(productToReturn); System.out.println(productToReturn.getName() + " successfully returned"); return productToReturn; } // 辅助方法:在购物车里按名称找商品 private SalableProduct findProductInCart(String productName) { // 这里根据你实际的购物车实现写逻辑,比如遍历集合匹配名称 for (SalableProduct item : cart) { if (item.getName().equalsIgnoreCase(productName)) { return item; } } return null; }
核心修复点
- 删掉递归调用:把
returnProduct(returnProd)换成实际的商品查找逻辑,比如新增一个辅助方法去购物车里找商品。 - Scanner复用:要么把Scanner作为类的成员变量,要么别在这个方法里关闭它,避免搞坏输入流。
- 优化方法设计:如果需要用户输入就去掉多余的
name参数;退货成功返回对应商品,失败返回null,让方法返回值有实际意义。
内容的提问来源于stack exchange,提问作者Mitchell
相关产品推荐
相关产品推荐

