2016-12-09 1 views
0
class Copied{ 
    public static void main(String args[])  throws java.io.IOException { 
     int i; 
     System.out.println("Press S to stop."); 
     for(i = 0; (char) System.in.read() != 'S'; i++)  
      System.out.println("Pass #" + i); 
    } 
} 

i Ergebnis bekommen konnte nicht zu erwarten.wie kann ich eine Endlosschleife stoppen(). System.in?

+2

Funktioniert gut für mich. Was ist dein erwartetes Ergebnis? Oder sind Sie verwirrt über die doppelte "Pass #" - Ausgabe pro eingegebenem Zeichen? – Tom

+1

Was ist das erwartete Ergebnis? Ich würde erwarten, dass die obige Schleife stoppt nach Eingabe von S. – GhostCat

+0

Ich wollte eine Endlosschleife, die nach dem Drücken von S zu stoppen, so dass ich don t Enter nach bestimmter Ausgabe –

Antwort

0

Was die oben genannten Code tut heikel ist

(char) System.in.read() != 'S' 

die .read() würde

das nächste Datenbyte aus dem Eingabestrom ausliest. der Wert Byte ist r eturned als int im Bereich 0 zu 255

So werden Sie Ihre Eingabe behandelt wie:

Input : a 
Output : Pass #0 // for a 
Pass #1 //for Enter 


Input : all 
Output : Pass #2 // a 
Pass #3 //l 
Pass #4 //l 
Pass #5 // Enter 

und in ähnlicher Weise für eine beliebige Zeichenfolge, wenn es S ein Zeichen enthält

Input : stingWithSHere 
Output : Pass #6 //s 
Pass #7 //t 
Pass #8 //i 
Pass #9 //n 
Pass #10 //g 
Pass #11 //W 
Pass #12 //i 
Pass #13 //t 
Pass #14 //h 

und dann endet es. Hoffnung, die Dinge klar aussehen lässt.


Um streng beschränken die Eingabe von dem Benutzer, den Sie stattdessen verwenden können -

new Scanner(System.in).next(".").charAt(0) != 'S' 

Mit der aktualisierten Frage, die Verbindung von @ Tom geteilt beantwortet sie für jetzt -

How to get input without pressing enter every time?

+0

Eigentlich wollte ich die Schleife weitergehen, bis ich 'S' eingeben, so dass ich nach bestimmten Anzeige nicht drücken muss, ich will es weiter können wir das tun, aber dieses ist auch hilfreich für mich, danke. –

Verwandte Themen