2016-07-09 10 views
1

Ich versuche, einige Eingabe Testfälle für eine wettbewerbsfähige Programmierung Problem zu analysieren, aber das Programm sitzt nur und wartet, obwohl ich die gesamte Zeile und die "\ n" lesen Charakter. HierJava: kann nicht readline() zu arbeiten

ist der Code:

public static void main(String[] args) throws IOException { 
    String result = "", input = ""; 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    while((input = br.readLine()) != null){ 
     result += input; 
    } 
    System.out.print(result); 
} 

Das ist super-vereinfacht, aber es funktioniert immer noch nicht. Wenn ich (ohne Anführungszeichen) "1 2 3 4 5 6 7 8 9" eingeben und dann die Eingabetaste drücken, wartet es nur auf weitere Eingaben. Wie kann ich es so machen, dass, nachdem ich Enter drücke, das Programm die While-Schleife verlässt?

Kann ich das auch für mehrere Zeilen machen? Wenn zum Beispiel nach dem letzten "\ n" keine weiteren Zeichen vorhanden sind, brechen Sie die Schleife ab.

Vielen Dank für Ihre Hilfe. :)

+0

Warum Sie eine while-Schleife brauchen? – alfasin

+1

Dies ist 2016. Warum verwenden Sie keine Try-with-Resources? – fge

+0

Ich möchte eine variable Anzahl von Zeilen eingeben. – Misha

Antwort

1

Nachdem Sie enter, ctrl + z auf Windows, ctrl + d auf Linux oder cmd + d auf Mac drücken.

Diese Tastaturkürzel werden in ihren jeweiligen Os verwendet, um EOF an das Betriebssystem zu signalisieren, das wiederum den jvm benachrichtigen wird.

Eine andere Möglichkeit, es zu tun, ohne cmd + d ist java myprogram <<< "1 2 3 4 5 6 7 8 9" zu tun oder die Zeichenfolge in einer Datei Aufruf setzen myprogram.in dann tun java myprogram < `cat myprogram.in`

2

Rufen Sie einfach readLine() einmal. Du hast es in einer Schleife. Wenn Sie es einmal anrufen, sollte es eine Zeile lesen. Hier

ist die Dokumentation auf readLine(): http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()

Es Statuen, die es zurück null nur, wenn das Ende des Streams erreicht ist. Da Sie System.in als Eingabestream verwenden, erreichen Sie das Ende nicht einfach durch Drücken der Eingabetaste.

+0

Danke, dass Sie mir geholfen haben zu erkennen, dass ich den' System.in'-Eingabestream beenden kann Drücken Sie einfach Enter – Misha

+1

@Misha Nein können Sie nicht. Sie können es beenden, indem Sie je nach System Strg/d oder Strg/z eingeben. Enter beendet nur eine einzelne Zeile. – EJP

+0

Entschuldigung. Tippfehler, meinte ich nicht – Misha