我的BufferedReader字符输入循环程序一直在运行

时间:2014-11-25 15:11:49

标签: java inputstream infinite-loop

我写了一个程序,打印出用户写入控制台的句子(或单词)的字符。我认为程序将在我给出第一个输入后结束。但即使打印完第一句后,它也没有并继续接受输入和打印。你能解释一下为什么会这样吗?我是新来的。这是程序:

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
Ë
一个

1 个答案:

答案 0 :(得分:2)

您过早地投射了br.read()的结果。

br.read()会返回int,其存储容量大于charchar既没有签名也没有大到足以存储-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