请问这段从键盘输入整数的程序为什么出现死循环呢?
下面是我为了输入整数所编的程序,我不想使用readLine(),于是编写如下,却好像出现了死循环,系统一直等待键盘输入。请问怎么回事?该如何调整呢?谢谢大家!
public static void main(String abc[]) throws
IOException {
int k;
char[] ch=new char[1];
StringBuffer str=new StringBuffer();
try{
System.out.print( "Please input an integer ");
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
while(bf.read(ch)!=-1){
str.append(ch);
}
bf.close();
k=Integer.parseInt(str.toString());
System.out.print( k );
}
catch(
NumberFormatException e){
System.out.print( "Invalid input! ");
return;
}
后来我在其他网站上询问,有人回复如下:
“程序从系统输入读取字符。如果输入1,程序得到的是1、换行符和回车符;如果什么也不输入直接回车,那么程序得到换行符和回车符;就是说,永远无法使循环条件 bf.read(ch)!=-1 为 false。
修改部分如下:
while(bf.read(ch)!=-1){
if(String.valueOf(ch[0]).equalsIgnoreCase( "\n ")){
continue;
}
if(String.valueOf(ch[0]).equalsIgnoreCase( "\r ")){
continue;
}
str.append(ch);
if(String.valueOf(ch[0]).equals( "9 ")){
break;
}
}
输入数字9后,退出并输出前面输入的数字的顺序组合。”
这样倒也行得通。可是系统的输入流总是有限的,当我调用read()方法依次读取流的一个个字符时,它应该总会读到流的结尾,这时候应该返回值-1啊,为什么不会出现呢?谢谢。
------解决方案--------------------键盘输入东西,怎么会掉到-1呢?
要知道,程序并不知道你什么时候要停止输入,再给你补一个-1.所以这个-1应该要你自己要做。
------解决方案--------------------System.in 应该是 BufferedReader 吧,
当其读取文件到最末尾时 便会返回 -1
其它情况 如果没有新的数据流,它会一直线程等待(受线程保护)
建议 你写一个结束输入符 (如 输入 ‘@’表示输入完成)
------解决方案--------------------ch==-1???
这又不是文件读写