habe mal in's java(script)-Brett verschobenZitat von Guin
![]()
Hallo Leute. (ich wusste nicht so recht wohin mit diesem Thema)
Ich bin gezwungen mich nun mit Java auseinander zu setzen.
Hier eine Schilderung fuer Java Experten.
Bei einem kleinen Test ist mir etwas mir nicht Verstaendliches aufgefallen.
Hier das Skript (es soll das Eingegebene [3 Techniken] wieder ausgeben)
Um den Eingabepuffer zu "leeren" verwende ich skip()Code:import java.io.* ; /** * Class Eingabe * Dateiname: Eingabe.java * @version 1.00, 21.03.2007 * */ public class Eingabe { /** Methode main startet das Programm. Es es werden insgesamt * drei Eingaben erwartet. *@Param String[] args Übergabeparameter des Programmaufrufs */ public static void main(String[] args) throws IOException { // wir leiten die Exception einfach //nach oben weiter, nicht unser Problem /** Variable enthaelt den Integerwert des eingegebenen Zeichens * bei Einbae 1 und Eingabe 2.*/ int i=32; /** Variable enthaelt den String der dritten Eingabe.*/ String expr = new String(); // 1. Eingabe System.out.print("\nEingabe bitte: "); i=System.in.read(); System.in.skip(System.in.available()); System.out.println(" Char: "+ (char)i + "\n Eingabetechnik: System.in.read() OHNE Ausnahmebehandlung"); // 2. Eingabe System.out.print("\n\nEingabe bitte: "); try{ // versuch doch mal, ob's klappt i=System.in.read(); // zweite Eingabe: Einzelzeichen System.in.skip(System.in.available()); // Eingabespeicher leeren } // try catch (java.io.IOException e){ System.err.println("Eingabefehler: "+e.toString()); } // catch (java.io.IOException) System.out.println(" Char: "+ (char)i + "\n Eingabetechnik: System.in.read() MIT Ausnahmebehandlung"); // 3. Eingabe BufferedReader In = new BufferedReader (new InputStreamReader (System.in)); System.out.print ("\nEingabe: "); expr = In.readLine(); System.out.println(" String: "+ expr +"\n Eingabetechnik: BufferedReader"); }// main(String[] args) } // public class Eingabe
"System.in.skip(System.in.available());"
Mit dieser Methode (mit available() ) kommt es zu keiner Exception wenn ich als Eingabe ^Z ([strg]+z) taetige.
Wenn ich
System.in.skip(200);
benutze, dann kommt es zu einer Exception.
Woran liegt dieser Unterschied?
Win XP SP2, Java 1.6
[edit] Danke, das Unterforum habe ich uebersehen.
Geändert von Guin (16.09.2008 um 11:53 Uhr)
Gruss Guin
Mein Blog
habe mal in's java(script)-Brett verschobenZitat von Guin
![]()
Hallo Guin,
"Java" ist nicht "Javascript". Du solltest Dir daher mit Google ein reines JAVA-Forum suchen.
Sorry, daß wir Dir hier nicht helfen können.
Tschau
Frank
Naja, es gab schon mal andere Threads zum Thema Java; die waren allerdings (wenn ich mich nicht irre) im Traum-Dynamik-Forum. Java gehört ja nicht einmal zum Thema Web-Design, wie HTML, JavaScript und CSS.
Also doch wieder zurueck nach smalltalk
Dies ist nicht das einzige Forum, wo ich gefragt, habe... Bisher konnte mir aber niemand das Phaenomen ganz schluessig erklaeren.
Vermutungen habe ich allerdings nun, woran es liegt (ist aber noch nicht spruchreif).
Gruss Guin
Mein Blog
So.. Loesung (falls mal jemand hier danach suchen sollte):
^Z ([strg]+z) = EOF (Stream wird geschlossen)
skip(200) ueberspringt dieses EOF und will den Puffer aus dem Stream nachladen, was aber nicht klappt (weil weil kein Stream offen ist).
available() sieht das EOF im Puffer und liefert 0 zurueck.
skip(available()) wurde also skip(0) bedeuten und somit keinen Fehler werfen.
Das ist der ganze Zauber.
PS: ich bitte die etwas lainenhafte Erklaerung zu entschuldigen. Besser kann ich es nicht ausdruecken.
Geändert von Guin (28.03.2007 um 20:03 Uhr)
Gruss Guin
Mein Blog
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)