0

我目前正在研究Java: Herbert Schildt 的完整参考第 8 版。我是最近的 compsci 毕业生和新手程序员。

在 I/O 章节中,本书提供了一小段示例代码(我已将其包含在下面)。该代码创建了一个 BufferedReader,它与 InputStreamReader(System.in) 作为参数一起提供(第 6 行)。我检查了InputStreamReader 的 Java SE7 文档,它说它“[...]读取字节并将它们解码为字符 [...]”。我的问题是,为什么在示例代码的第 9 行将 br.read() 分配给 'c' 时有必要(或者甚至有必要)将其转换为 char?

非常感谢您提供的任何帮助。

杰米

1.  import java.io.*
2.  
3.  class BRRead {
4.       public static void main(String args[]) throws IOException {
5.            char c;
6.            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7.            System.out.println("Enter characters, 'q' to quit.");
8.            do {
9.                 c = (char) br.read();
10.                System.out.println(c);
11.           } while(c != 'q');
12.      }
13. }
4

3 回答 3

1

read()方法返回类型的值int。因此,需要铸造。

于 2012-07-13T15:19:25.750 回答
1

您的.read()方法是从BufferedReader类中调用的,根据文档,您br.read()将返回 int。因此,为了将该 int 转换为 char,您需要对其进行转换。

http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html

public int read()
         throws IOException
Reads a single character.
Overrides:
read in class Reader
Returns:
The character read, as an integer in the range 0 to 65535 (0x00-0xffff), or -1 if the end of the stream has been reached
Throws:
IOException - If an I/O error occurs
于 2012-07-13T15:24:13.563 回答
0

代码不正确。'c' 应声明为 'int',以便将其与 -1 进行比较是有意义的。如果为-1,则循环应退出,否则在用作char 时必须将其强制转换为char。

于 2012-07-13T18:00:36.873 回答