Java Grocery购物车程序Do While循环逻辑异常求助
解决Java Grocery商店购物车重复循环的问题
嘿,我一眼就看出你大概率踩了Java Scanner类的输入缓冲区坑!咱们先捋清楚问题出在哪:
你说首次添加商品一切正常,但输入y继续后,再输入商品编号就直接回到循环开头,没法继续添加。这个情况几乎都是因为**nextInt()读取整数后,没处理输入缓冲区里残留的换行符**导致的。
问题根源
当用户输入商品编号(比如1)然后按回车,scanner.nextInt()只会读取数字1,但回车产生的换行符\n会留在输入缓冲区里。之后你用nextLine()读取用户是否继续的输入时,它会直接读取这个残留的换行符,相当于用户输入了空字符串,程序就会直接回到循环开头,根本没等到你输入新的商品编号。
修复方案
有两种简单的解决办法,我给你贴合你原有代码结构的第一种方案:
每次用nextInt()读取完整数后,调用scanner.nextLine()清空缓冲区里的换行符,避免干扰后续的输入读取。
修改后的核心逻辑示例:
import java.util.Scanner; public class GroceryStore { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); boolean keepAdding = true; while (keepAdding) { // 这里放你的商品选项展示代码 System.out.println("请输入要添加的商品编号:"); int itemNum = scanner.nextInt(); // 关键步骤:清空nextInt()留下的换行符 scanner.nextLine(); System.out.println("请输入要添加的数量:"); int quantity = scanner.nextInt(); // 再次清空换行符 scanner.nextLine(); // 这里执行商品加入购物车的逻辑 System.out.println("已将编号" + itemNum + "的商品" + quantity + "件加入购物车"); System.out.println("是否继续添加商品?(y/n)"); String choice = scanner.nextLine().trim().toLowerCase(); if (!choice.equals("y")) { keepAdding = false; } } scanner.close(); System.out.println("购物车操作结束"); } }
额外小提示
- 可以给输入加合法性校验,比如判断商品编号是否存在、数量是否为正整数,避免非法输入导致程序崩溃
- 如果想统一用
nextLine()读取所有输入,记得用Integer.parseInt()转换数字,同时捕获NumberFormatException处理非数字输入的情况
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

