Ich bin nicht in der Lage zu verstehen, warum ich im folgenden Code (2. Zeile der Ausgabe) null von bufferedreader bekommen, während es an einigen Stellen (erste Zeile der Ausgabe) gut funktionierte.NULL-Wert von bufferedreader
Ich habe mehrere system.out.println nur für Debugging-Zwecke verwendet.
Obwohl BufferedReader.readLine() nur dann null zurückgibt, wenn das Ende des Streams erreicht ist, wird die Eingabe bereitgestellt (wie in der Eingabe unter dem Programm angezeigt). Bitte helfen Sie mir, den Grund zu bekommen, null zu werden und eine Lösung vorzuschlagen.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
import java.lang.Integer;
import java.io.*;
class TestClass {
public static void main(String args[]) throws Exception {
//* Read input from stdin and provide input before running
List a2=new ArrayList();
String[] a1=new String[2];
int count=0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
/*for (String retval: line.split(" "))
a2.add(retval);*/
a1=line.split(" ");
//System.out.println("here 0"+a1[0]+" "+a1[1]);
/*int N = Integer.parseInt((a2.get(0)).toString());
int Q= Integer.parseInt((a2.get(1)).toString());*/
int N = Integer.parseInt(a1[0].toString());
int Q= Integer.parseInt(a1[1].toString());
System.out.println("here xxxxxxxx" + N +" " +Q);
String[] names=new String[N];
for(int i=0;i<N;i++){
//names[i] = (new BufferedReader(new InputStreamReader(System.in))).readLine();
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
names[i] = br1.readLine();
/*Scanner sc=new Scanner(System.in);
names[i]=sc.nextLine();*/
}
System.out.println("here 111" + names[0]);
for(int i=0;i<Q;i++) {
br = new BufferedReader(new InputStreamReader(System.in));
String line1 = br.readLine();
try{
System.out.println("here 1" + line1);
int M = Integer.parseInt(line1);
System.out.println("here 2");
if(M<=20){
System.out.println("here 3");
count++;
}
}
catch(Exception e){
System.out.println("here 4");
if(!((Arrays.asList(names)).contains(line))){
System.out.println("here 5");
count++;
}
}
}
System.out.println(count);
}
}
Eingangs
Erste Zeile des Eingangs wird zwei Leerzeichen getrennt ganze Zahlen bezeichnen N und Q. enthalten
nächsten N Zeilen Strings enthalten
Next Q Zeilen entweder eine ganze Zahl enthalten oder eine Zeichenfolge, die den Namen einer Person angibt. Abhängig davon, ob es sich um einen String oder einen Integer handelt, müssen unterschiedliche Logiken implementiert werden.
enter code here
Ein- und Ausgänge sind wie folgt:.
Input:
2 4
pranjul
sachin
21
19
pranjul
vipul
Output:
here xxxxxxxx2 4
here 111null
here 1null
here 4
here 5
here 1null
here 4
here 5
here 1null
here 4
here 5
here 1null
here 4
here 5
4
Der "Grund von null" ist Ende des Stromes, gerade wie Sie sagten. Sie testen nicht dafür oder behandeln es. Tun Sie dies. Hinweis: Erstellen Sie nicht jedes Mal einen neuen gepufferten Leser, wenn Sie sich in der Schleife befinden. Sie können auf diese Weise Daten verlieren. Benutze das selbe. – EJP