2016-04-21 4 views
1
public class Pack1 { 
    public static void main(String ar[]) throws IOException { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("enter the character"); 
     char c=(char)br.read(); 
     System.out.println(c); 
     System.out.println("enter the integer"); 
     long l=Integer.parseInt(br.readLine()); 
     System.out.println("long l="+l); 

     System.out.println(c); 
    } 
} 
+0

Also was genau ist deine Frage? – Mureinik

+0

Ich möchte Char-Eingabe zuerst und dann Int-Eingabe, aber es zeigt Zahlenformat Ausnahme –

Antwort

3

Lassen Sie uns sagen, dass die Benutzertypen X und drückt auf die erste Frage eingeben, dann Typen 123 und drückt auf die zweite Frage eingeben, das würde bedeuten, dass der Eingangsstrom die folgenden Zeichen enthält:

X <CR> 1 2 3 <CR> 

Wenn Sie Rufen Sie read(), lesen Sie nur die X. Wenn Sie dann readLine() anrufen, lesen Sie die <CR> und erhalten eine leere Zeichenfolge zurück.

Der 1 2 3 <CR> sitzt immer noch ungelesen im Eingangsstrom.

Lösung: Rufen Sie readLine() nach den X Lesen hinter dem Rest der Zeile zu überspringen, oder Verwendung readLine() die X als ein String, statt als char zu lesen.

FYI: Das ist genau das gleiche Problem Menschen, die halten, wenn Scanner und Misch Anrufe nextLine() mit Anrufen zu anderen nextXxx() Methoden, wie nextInt().

+0

Also wann immer ich Char-Eingabe muss ich als String Eingabe nehmen und dann das erste Zeichen ..? –

+0

Sie fragen den Benutzer in einer zeilenorientierten Weise, z. Geben Sie die Antwort ein, drücken Sie die Eingabetaste, geben Sie die Antwort ein und drücken Sie die Eingabetaste. Daher sollten Sie die Eingabe auch zeilenorientiert lesen, insbesondere wenn Sie nur nach jeweils einem Wert fragen. --- Denken Sie auch daran, z.B. wenn der Benutzer die Eingabetaste drückt, ohne etwas einzugeben, was dann? Oder gibt 'abc' ein, wenn Sie nach einer Nummer gefragt haben. – Andreas

0

Wechsel:

long l=Integer.parseInt(br.readLine()); 

zu:

long l=Long.parseLong(br.readLine(), 10); 

Dies liegt daran, dass Sie versuchen, die Zeichenfolge zu lang und nicht ein Integer-Typ zu konvertieren.