0

私は現在、ハーバート・シルトによるJava:The Complete Reference8thEditionを使用しています。私は最近の計算機科学の卒業生であり、初心者のプログラマーです。

I / Oの章では、この本はサンプルコードの小さな断片を示しています(以下にそれを含めました)。このコードは、引数としてInputStreamReader(System.in)で提供されるBufferedReaderを作成します(6行目)。Java SE7のドキュメントでInputStreamReaderを確認したところ、「[...]バイトを読み取り、文字にデコードする[...]」と表示されています。私の質問は、サンプルコードの9行目の「c」にbr.read()を割り当てるときに、なぜbr.read()を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()メソッドは type の値を返します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 に答える