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

为何运行下述代码时输入"3"不输出"Print",输入"33"却能输出?

为啥输入"3"没输出"Print",输入"33"却能出来?

先看你贴的这段代码:

public static void main(String[] args) throws Exception { 
    DataInputStream input; 
    int any; 
    input = new DataInputStream(System.in); 
    any = input.readInt(); 
    System.out.println("Print"); 
}

问题核心出在DataInputStream.readInt()这个方法上——它根本不是用来读取你在控制台输入的十进制数字字符串的!

这个方法的作用是从输入流里读取4个字节的二进制数据,直接拼成一个Java的int类型值。也就是说,它必须凑够整整4个字节才会返回结果,否则就会一直阻塞在那里等待数据输入。

咱们拆解两种情况:

  • 当你输入"3"时,控制台只给输入流传了1个字节('3'的ASCII码是0x33)。readInt()还缺3个字节,就会一直卡在那里,程序根本走不到System.out.println("Print")这一行,自然看不到输出。
  • 至于输入"33"能输出的情况,严格来说输入"33"也只有2个字节,除非你输入"33"后还补充了其他内容(比如两次回车,回车也是1字节),凑够了4个字节。这时候readInt()拿到足够的字节终于返回,程序才会继续执行后面的打印语句。

简单说,你用错方法啦!如果要读取控制台输入的十进制数字,更合适的做法是用Scanner,或者先读取字符串再转成int:

// 方法1:用Scanner
Scanner scanner = new Scanner(System.in);
int any = scanner.nextInt();
// 方法2:用BufferedReader读字符串再转换
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int any = Integer.parseInt(reader.readLine());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:59:57