You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 08:53:13