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

Scanner调用nextInt()后构造方法传参时nextLine()被跳过问题咨询

Scanner方法作为构造参数时nextLine被跳过的解决方案

nextInt()、nextDouble()这类非字符串读取方法,仅会读取输入中的数值部分,不会处理数值后方的换行符。当后续直接调用nextLine()时,会直接读取到该残留的换行符,返回空字符串,这是问题的核心原因。

以下是三种可行的解决方案:

  • 方案1:拆分参数读取步骤(最推荐,可读性最高,便于后续调试)
    不要直接把Scanner方法调用写在构造参数中,提前读取所有参数并处理换行残留,再传入构造方法:
// 单独读取每个参数,中间插入nextLine清理换行残留
int id = value.nextInt();
value.nextLine(); // 吃掉nextInt遗留的换行符
String productName = value.nextLine();
double price = value.nextDouble();
product c2 = new product(id, productName, price);
  • 方案2:使用Java逗号运算符在参数内处理残留换行(仅适合必须写在单行的场景,可读性较差)
    利用Java逗号运算符会依次执行表达式、返回最后一个表达式结果的特性,在参数位直接完成换行清理:
product c2 = new product(value.nextInt(), (value.nextLine(), value.nextLine()), value.nextDouble());

括号内会先执行第一个value.nextLine()清理残留换行,再返回第二个value.nextLine()的结果作为构造方法的第二个参数。

  • 方案3:统一使用nextLine()读取后手动转换类型(完全规避换行残留问题)
    所有输入统一用nextLine()读取,再手动转换为对应类型,从根源上避免不同方法的换行处理差异:
product c2 = new product(
    Integer.parseInt(value.nextLine()),
    value.nextLine(),
    Double.parseDouble(value.nextLine())
);

该方案要求输入时每个值单独占一行,避免类型转换失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:57:07