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

Java中Scanner输入异常:无法读取title且cost输入报错求助

问题原因与解决方法

核心问题分析

  1. title被跳过:kb.nextInt()仅读取输入的整数部分,输入完成后按下的回车键(换行符)会留在输入缓冲区中,后续的kb.nextLine()会直接读取这个空换行符,导致title被赋值为空字符串,程序跳过输入提示直接进入category环节。
  2. cost输入异常:若前面的换行符未处理干净,kb.nextFloat()可能读取到非预期字符(如残留换行)引发转换失败;另外如果输入时用逗号(如12,3)而非英文小数点(12.3)作为小数分隔符,也会触发异常。

解决方法

方法一:手动消费残留换行符

在调用nextInt()这类非整行读取方法后,额外调用一次kb.nextLine()清空缓冲区里的换行符:

package ChuoiTrongJava;
import java.util.Scanner;
public class IndexOf {

    public static void main(String[] args) {
    
        Scanner kb = new Scanner(System.in);
        System.out.print("ID: ");
        int id = kb.nextInt();
        kb.nextLine(); // 消费ID输入后的换行符
        System.out.print("\nTitle: ");
        String title = kb.nextLine();
        System.out.print("\nCategory: ");
        String category = kb.nextLine();
        System.out.print("\nCost: ");
        Float cost = kb.nextFloat();
        
        // 验证输入结果
        System.out.println("\n已输入内容:");
        System.out.println("ID: " + id);
        System.out.println("Title: " + title);
        System.out.println("Category: " + category);
        System.out.println("Cost: " + cost);
    }
}

方法二:统一用nextLine()读取所有输入(更推荐)

这种方式彻底避免缓冲区残留问题,同时能更灵活处理输入场景:

package ChuoiTrongJava;
import java.util.Scanner;
public class IndexOf {

    public static void main(String[] args) {
    
        Scanner kb = new Scanner(System.in);
        System.out.print("ID: ");
        int id = Integer.parseInt(kb.nextLine()); // 读取整行后转换为int
        System.out.print("\nTitle: ");
        String title = kb.nextLine();
        System.out.print("\nCategory: ");
        String category = kb.nextLine();
        System.out.print("\nCost: ");
        Float cost = Float.parseFloat(kb.nextLine()); // 读取整行后转换为float
        
        // 验证输入结果
        System.out.println("\n已输入内容:");
        System.out.println("ID: " + id);
        System.out.println("Title: " + title);
        System.out.println("Category: " + category);
        System.out.println("Cost: " + cost);
    }
}

额外注意事项

  • 输入cost时必须使用英文小数点(.)作为小数分隔符,例如输入29.99而非29,99,否则会触发转换异常。
  • 若要处理用户输入错误的情况(比如输入非整数的ID),可以添加try-catch块捕获异常,提升程序健壮性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:32:21