使用缓冲读取器读取整数

4
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("please enter the size of array");
size = br.read();
sarray = new int[size];

for (int i = 0; i < size; i++) {
    sarray[i] = i;
}
System.out.println(sarray.length);

当我尝试打印数组的长度时,即使我给定了大小为“3”,它仍显示为“51”。


51 是 ASCII 码中代表数字 3 的代码,如果这能给你一些提示的话... - fixmycode
另一个提示:BufferedReader没有用于读取shorts、longs、doubles等的方法。为什么int应该是特殊的呢?它并不是,返回的int具有不同的含义。 - Thomas
2个回答

10

使用readLine()方法而不是read()方法。

int size = Integer.parseInt(br.readLine());

read() 方法不能返回输入的确切 int 值。

public int read() throws IOException 读取单个字符。覆盖:Reader 类中的 read 返回:所读取的字符,作为范围在 0 到 65535(0x00-0xffff)之间的整数;如果已到达流的末尾,则返回 -1 抛出:IOException - 如果发生 I/O 错误

参考资料:http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#read()


6

BufferedReader.read() 方法读取一个字符并将其作为整数返回(即返回字符的ASCII码)。

当您向 BufferedReader 输入 3 时,read() 将其读取为一个字符,即 '3',对应的 ASCII 码为 51。

您可以通过执行以下代码进行验证:

System.out.println((int) '3'); // prints 51

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接