为何运行下述代码时输入"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
相关产品推荐
相关产品推荐

