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

实习项目中Scanner为quantity赋值时程序执行停滞无报错求助

解决Scanner赋值时线程停滞的问题

嘿,我来帮你排查这个Scanner卡住的问题~结合你说的实习项目场景(费用类别选择、金额存ArrayList、打印总费用),我梳理了几个常见的原因和对应的解决方案:

常见原因分析

  1. 输入类型不匹配导致无限等待
    如果你的quantity定义为int类型,但用户输入了小数、字母或者其他非数字内容,Scanner会一直卡在那里等待有效的整数输入,而且不会抛出错误,看起来就像线程停滞了。

  2. Scanner缓冲区残留的空白字符干扰
    要是你在读取quantity之前用了nextLine()读取费用类别,有时候缓冲区里残留的换行符会让后续的输入方法出现异常行为(不过nextInt()/nextDouble()会自动跳过空白,这个情况概率稍低,但如果是用next()读类别再用nextLine()读金额,就很容易踩坑)。

  3. Scanner初始化错误
    确保你是用System.in作为输入源初始化的Scanner,比如new Scanner(System.in),如果用了其他输入流,也可能导致无法读取控制台输入。

修复后的代码示例

我结合你的需求写了一段完整的可运行代码,解决了Scanner停滞的问题,还优化了金额的类型(用double更贴合实际费用场景):

package gestioneconomica;

import java.util.ArrayList;
import java.util.Scanner;

public class ExpenseTracker {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<Double> categoryExpenses = new ArrayList<>();
        String selectedCategory;
        double expenseAmount;

        // 引导用户选择费用类别
        System.out.println("请选择费用类别(例如:餐饮、交通、购物):");
        selectedCategory = scanner.nextLine();

        // 安全读取费用金额,避免输入无效内容导致停滞
        System.out.println("请输入该类别的费用金额:");
        while (!scanner.hasNextDouble()) {
            System.out.println("输入无效,请输入数字格式的金额(支持小数):");
            scanner.next(); // 丢弃无效的输入内容,避免死循环
        }
        expenseAmount = scanner.nextDouble();
        categoryExpenses.add(expenseAmount);

        // 计算并打印该类别的总费用
        double totalExpense = 0;
        for (double expense : categoryExpenses) {
            totalExpense += expense;
        }
        System.out.printf("类别【%s】的总费用为:%.2f\n", selectedCategory, totalExpense);

        scanner.close(); // 使用完毕后关闭Scanner
    }
}

关键优化点

  • 用hasNextDouble()提前校验输入是否有效,避免Scanner无限等待
  • 金额用double类型,支持小数金额的输入
  • 加入了无效输入的提示逻辑,提升用户体验
  • 最后关闭Scanner,释放资源

内容的提问来源于stack exchange,提问作者user9146924

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:09:36