为什么这个程序BufferedReader
会有无限的输入?
下面是无限输入的代码。为了避免这种情况,我添加了条件
while((!(s1=br.readLine().trim()).equals(null))&&(!s1.isEmpty())){
但它没有成功。
import java.io.*;
import java.util.*;
public class skylerStudent {
public static void main(String []args)throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String s1="";String s="";
while((!(s1=br.readLine().trim()).equals(null))&&(!s1.isEmpty())){
s+=s1.trim()+" ";
}
StringTokenizer st=new StringTokenizer(s.trim());
int i=0,n=0,q=0;
while(st.hasMoreTokens()){
if(i==0)n=Integer.parseInt(st.nextToken());
if(i==1)q=Integer.parseInt(st.nextToken());
i++;
}
int ar[]=new int[n];i=0;
while(st.hasMoreTokens()){
if(i<n)ar[i]=Integer.parseInt(st.nextToken());
i++;
}
i=0;
while(st.hasMoreTokens()){
StringTokenizer st1=new StringTokenizer(st.nextToken());
while(st.hasMoreTokens()){
if(i<q){
int a=Integer.parseInt(st1.nextToken());
int b=Integer.parseInt(st1.nextToken());
System.out.println(a);System.out.println(b);}
i++;
}
}
}
}
答案 0 :(得分:0)
条件!(s1 = br.readLine().trim()).equals(null)
不正确。如果你可以在字符串上调用.trim,那么它永远不会为null。你可以检查
(s1 = br.readLine()) != null
此外,无限循环不在读取输入中,而是在后面的代码循环中。
while (st.hasMoreTokens()) {
if (i == 0)
n = Integer.parseInt(st.nextToken());
if (i == 1)
q = Integer.parseInt(st.nextToken());
i++;
}
如果我不在(0,1),你不会向nextToken()
前进。这就是为什么它永远不会退出循环。