Ich versuche zu lesen von System.in
. Der Eingang ist in diesem Typ: Die erste Zahl ist die Anzahl der Testfälle, dann im Integer dann einige Zeilen.Scanner stoppen, wenn es keine Zeilen mehr zu lesen gibt
2
10
c 1 5
c 2 7
q 7 1
1
q 1 1
c 1 1
q 1 1
Das Problem ist, dass während Schleife nicht beendet, wenn ich den letzten Test beenden, trotz dass es sc.hasNext()
Bedingung in der Schleife ist.
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int testCases = sc.nextInt();
for(int i=0;i<testCases; i++){
int numberOfQuestions = 0;
int numberOfSuccessufulQuestions = 0;
int computerNumber = sc.nextInt();
Graph g = new Graph();
while(!sc.hasNextInt() && sc.hasNext()){
String type = sc.next();
if (type.trim().equals("\n"))
break;
if(type.equals("c")){
int a = sc.nextInt();
int b = sc.nextInt();
g.setEdge(a, b);
}else if(type.equals("q")){
visited = new HashMap<>();
int a = sc.nextInt();
int b = sc.nextInt();
numberOfQuestions++;
if(a == b){
numberOfSuccessufulQuestions++;
}
else if(g.isNodeExist(a) && g.isNodeExist(b)){
if(connected(g, a, b)){
numberOfSuccessufulQuestions++;
}
}
}
}
System.out.println(numberOfSuccessufulQuestions+ ","+ (numberOfQuestions - numberOfSuccessufulQuestions));
}
}
Graph ist abstrakt kippt instanziert werden. – ferit
'if (type.trim(). Equals (" \ n ")) break;' sollte 'continue;' stattdessen verwenden. Andernfalls endet der Testfall nach der ersten Zeile. – 4castle
'hasNext()' wird nicht falsch sein, wenn Sie den Stream nicht beenden. Es gibt immer die gleiche Frage zum Stoppen des Scanners auf "System.in". – Tom