2016-11-13 4 views
-4

Ich habe eine Zuordnung, wo ich BufferedReader, System.in.read() mit einer ausgelösten Ausnahme und System.in.read() mit catch und versuchen muss. Das ist was ich bisher habe.Eine meiner Eingaben wird übersprungen

import java.io.*; 

public class Test { 

    public void Bufferedreader() throws IOException { 
     BufferedReader In = new BufferedReader (new InputStreamReader(System.in)); 
     String expr = new String(); 
     System.out.print("Input: "); 
     expr = In.readLine(); 
     System.out.println("Output: " + expr); 
     System.out.println("------------------------------------------"); 
    } 


    public void throwexception() throws IOException { 
     int Eingabe=20; 
     System.out.print("\nInput"); 
     Eingabe=System.in.read(); 
     System.out.println("\n" + (char)Eingabe); 
     System.out.println("------------------------------------------"); 
    } 

    public void Exception() { 
     int i=32; 
     System.out.print("\nEingabe "); 

     try { 
      i=System.in.read(); 
     } catch (java.io.IOException e) { 
      System.out.println("Eingabefehler "+ e); 
     } 

     System.out.println("\n" + (char)i); 
     System.out.println("------------------------------------------"); 

    } 

    public static void main(String[] args) throws Exception 
    { 
     Test method = new Test(); 
     method.Bufferedreader(); 
     method.Exception(); 
     method.throwexception(); 
    } 
} 

BufferedReader funktioniert gut und so auch eine der System.in.read() Eingänge aber der dritte Eingang wird immer übersprungen. Beide System.in.read funktionieren separat, aber ich kann nicht beide System.in.read() zusammen arbeiten.

Hier ist, was die Ausgabe wie folgt aussieht:

Input: 5 

Output: 5 

------------------------------------------ 

Input 5 

5 

------------------------------------------ 

Input 

----------- 

Vielen Dank im Voraus

+1

Possible Duplikat [System .in.read() liest nicht] (http://stackoverflow.com/questions/15307355/system-in-read-does-not-read) –

Antwort

1

System.in.read() das nächste Byte von Daten aus dem Eingangsstrom liest.

Also, wenn Sie geben die zweite Eingabe in method.Exception() geben, gibt es tatsächlich zwei Zeichen (drei, wenn Sie Windows verwenden) im Eingabestream. Das zweite Zeichen (möglicherweise das Zeilenvorschubzeichen) wird durch das dritte (letzte) Lesen gelesen() und das Programm endet.

Versuchen die überladene Version von Read() Methode: read (byte [] b), die liest einige Anzahl von Bytes aus dem Eingangsstrom und speichert sie in dem Pufferarray b

+1

* "Also, wenn Sie das zweite Zeichen eingeben" * denke ich Sie meinen "das erste Zeichen", weil OP keine Chance hat, ein zweites einzugeben. Ich gehe auch davon aus, dass es im Stream ein * drei * Zeichen gibt, da OP wahrscheinlich Windows benutzt. – Tom

+0

Ah ja, die zweite Eingabe nach dem 'BufferedReader'. Ich meinte die erste dieser 'System.in.read()' Versionen: D. – Tom

+0

Missverständnisse wie diese lassen mich das Ausmaß der Aufgabe des natürlichen Sprachverständnisses und anderer Herausforderungen der KI erkennen. Wie auch immer, machte es jetzt expliziter :) –

Verwandte Themen