Ich habe ähnliche Themen gesehen, aber ich kann nicht scheinen, eine funktionierende Lösung zusammenzubauen. Ich schreibe ein Programm, das (teilweise) Werte von stdin liest, um einige Operationen auszuführen. Ich beabsichtige jedoch, die Eingabe aus einer Textdatei zur Laufzeit umzuleiten, sodass ich nicht einfach ein EOF mit Strg + Z (Windows) ausgeben kann.Java-Scanner hasNextLine() Blockierung Problem
String s;
int v2 = 0;
double w = 0;
int v1 = 0;
int i = 0;
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
s = sc.nextLine();
String[] arr = s.trim().split("\\s+");
v1 = Integer.parseInt(arr[0]);
v2 = Integer.parseInt(arr[1]);
w = Double.parseDouble(arr[2]);
i++;
}
System.out.println(i);
sc.close();
Ich kann nie auf die endgültige Druck Erklärung zu bekommen scheinen, wie (meine Vermutung sowieso) scheint es hasNextLine() auf unbestimmte Zeit blockiert. Hier
ist ein Beispiel für das Format der Eingabedatei:
0 1 5.0
1 2 5.0
2 3 5.0
3 4 5.0
4 5 5.0
12 13 5.0
13 14 5.0
14 15 5.0
...
-1
Es ist immer im Format int int double, aber der Abstand zwischen variieren kann, damit die String-Operationen. Es endet auch immer mit -1.
Ich habe die folgenden ohne Erfolg
String s;
int v2 = 0;
double w = 0;
int v1 = 0;
int i = 0;
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
s = sc.nextLine();
String[] arr = s.trim().split("\\s+");
v1 = Integer.parseInt(arr[0]);
if(v1 < 0){
break;
}
v2 = Integer.parseInt(arr[1]);
w = Double.parseDouble(arr[2]);
i++;
}
System.out.println(i);
sc.close();
Ich habe die meisten den Code links ausprobiert, die nicht relevant ist Unordnung zu vermeiden. Ich kann bei Bedarf posten.
Vielen Dank für einen Blick.
EDIT: Für die Klarheit bearbeitet. Beachten Sie auch, dass es unabhängig vom Zeileninhalt in der letzten Zeile der Eingabedatei hängt (dh gültige Zeilen hängen). Ich leite über Eclipse (Neon) um.
Mögliches Duplikat [Wie aus while-Schleife in Java mit Scanner-Methode "hasNext" als Bedingung zu bekommen?] (Http://stackoverflow.com/questions/10490344/how-to-get-out- while-in-java-mit-scanner-methode-hasnext-als-bedingung) – Tom
Entschuldigung, ich habe eine andere Version des Codes verwendet, in dem ich versucht habe, hasNextLine() zu umgehen. Ich habe auch den Thread gesehen, den Sie erwähnt haben, und versucht, diese Lösung zu implementieren, aber es hat nicht funktioniert, was zu dem Verdacht führte, dass das Problem variieren könnte. –
Und wie sieht * "versucht, diese Lösung zu implementieren" *? – Tom