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

Java BufferedReader结合StringTokenizer时st.toString()转int报错原因

异常根因

x =Integer.parseInt(st.toString()); 抛出运行时异常的核心原因是方法调用逻辑完全错误:

  • StringTokenizer类的toString()方法不会返回当前拆分到的字符串片段,而是返回该对象自身的字符串表示,格式通常为java.util.StringTokenizer@对象哈希值,内容包含类名、内存地址标识,根本不是纯数字字符串,传入Integer.parseInt()做类型转换必然触发NumberFormatException。
  • 后续y、a变量的取值写法也存在冗余:nextToken()方法本身的返回值就是String类型,不需要额外调用toString()做转换;且StringTokenizer默认以空格、换行、制表符等空白字符作为分隔符,不需要手动传入" "作为分隔参数。
  • 代码中额外编写的X、Y、A取值范围校验属于多余逻辑:题目已经明确保证输入参数全部符合约束范围,额外添加这层判断不会带来任何收益,反而可能因为前置解析错误导致逻辑异常。
修复方案

正确的取值逻辑是逐次调用st.nextToken()获取拆分后的独立字符串片段,再转换为整数即可,修正后的可运行代码如下:

import java.util.*;
import java.io.*;

class Codechef
{
    public static void main (String[] args) throws Exception
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        for (int i = 0; i < n; i++)
        {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
            int a = Integer.parseInt(st.nextToken());
            System.out.println(a >= x && a < y ? "YES" : "NO");
        }
        br.close();
    }
}
补充说明
  • 变量建议就近声明,不需要在方法开头集中定义所有循环变量,能有效提升代码可读性。
  • 流资源使用完成后建议主动调用close()方法释放资源,避免资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:36:27