为什么在这个程序中BufferedReader采用无限输入

时间:2017-12-03 21:16:52

标签: java-8 bufferedreader

为什么这个程序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++;
        }
    }

}
}

1 个答案:

答案 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()前进。这就是为什么它永远不会退出循环。