我写了一个程序,打印出用户写入控制台的句子(或单词)的字符。我认为程序将在我给出第一个输入后结束。但即使打印完第一句后,它也没有并继续接受输入和打印。你能解释一下为什么会这样吗?我是新来的。这是程序:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
/*
* This program prints out the characters written in the console
* line by line.
*/
public class ReaderProgram {
public static void main(String args[]) throws IOException{
char c;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
do{
//reads character and stores it in c
c = (char) br.read();
//prints out c
System.out.println(c);
}while(c != -1);
//'while' checks if c is -1 (-1 means end of the stream)
}
}
此处显示输出(控制台的输入显示为 此 ):
史诗
Ë
p
我
ç
的 梦
d
[R
Ë
一个
米
答案 0 :(得分:2)
您过早地投射了br.read()
的结果。
br.read()
会返回int
,其存储容量大于char
。 char
既没有签名也没有大到足以存储-1
和完整的UTF-16值范围。
通过将结果转换为char
,然后将其与-1
进行比较,您已有效地将-1转换为Character.MAX_VALUE
。哪个永远不能等于-1
。
请考虑以下代码:
public static void main( String[] args ) {
char v = (char) -1;
System.out.println( "v = " + (int) v );
}
它将打印65535
,而不是-1
。