Prob mit System.in.read in Konstruktor
-
Hi, vielleicht kann mich einer von euch retten, bevor ich meinen Kopf an der Wand zerhämmer ..
Es geht um folgenden Konstruktor:
public class Medium { protected int sig, i; protected String titel; protected boolean praesent; public Medium() throws java.io.IOException{ byte[] buffer = new byte[80]; System.out.println("Mediumdaten eingeben: Titel, Signatur"); //System.out.println("Jetzt Eingabe!"); try { System.in.read(buffer, 0, 80); } catch (Exception e) { System.out.println("\nFehler!"); } titel = new String (buffer, 0, i); //System.out.println(i); System.out.println(buffer); praesent = true; } }
Bei der Stelle "System.in.read" hält das Prog einfach nicht an, genauer gesagt, saust es da durch und ich hab keine Chance irgendwas einzugeben. Woran kann das liegen? Kopier ich den Teil in ein anderes leeres Projekt funzt das einlesen und ausgeben komischerweise. Hat das was damit zu tun, dass das alles im Konstruktor passiert?
Bitte nicht schlagen, wenn es ne doofe Frage ist, aber ich hab jetzt tagelang dran rumprobiert, aber ich komm nicht drauf. Bin ja auch noch Anfängerin ...
Gruß,
Nova
-
Hi
Bitte nicht schlagen, wenn es ne doofe Frage ist, aber ich hab jetzt tagelang dran rumprobiert, aber ich komm nicht drauf. Bin ja auch noch Anfängerin ...
Also jettz bist du dran.
Ne mal im ernst ich weis auch nicht warum der da nicht stehen bleibt.
Aber versuch es mal mit folgendermassen.BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String eingabe = in.readLine();
Du hast da noch so kleine Design Fehler.
public Medium() throws java.io.IOException
Das macht keinen Sinn wenn du folgendes schreibst.
try
{
System.in.read(buffer, 0, 80);
}
catch (Exception e) {
System.out.println("\nFehler!");
}Du fängst doch schon mit try/catch die allgemeinste Exception auf die es überhaupt gibt. Und weiter oben versucht du throws IOExcpetion, dieses throw würde nie ausgeführt werden.
Mach lieber das IOExcpetion um das read herum oder besser gesagt readLine().
OK BYE DANN
-
Hmm .. komisch .. mein letzter Beitrag ist verschwunden ...
(in dem wollt ich eigentlich noch zurückschlagen )
Erstmal noch Danke für deine Antwort. Ich hab es jetzt so gemacht, wie du's mir vorgeschlagen hast ... und das funzt! Zwar ist das jetzt nicht mehr so wie es unser Prof haben wollte, aber mir ist das jetzt egal, der soll das so fressen oder mir erklären, warum das anders nicht geht.
Danke auf für den Tipp mit meinen Designfehlern. Mit den Exceptions kenn ich mich ja noch gar nicht aus, die bastel ich immer da rein, wo er rummeckert ... naja, da muss ich wohl noch einiges lernen!!
Jetzt hab ich aber noch ein neues Problem. Von einer Klasse hab ich eine andere abgeleitet. Nun wollte ich jeweils mit den Konstruktoren Daten vom User einlesen, um das jeweilige Objekt zu erstellen. Nun springt er mir aber zuerst in den Konstruktor von meiner Elternklasse und danach in die Kindsklasse. Irgendwie versteh ich das nicht so ganz. Wenn die Methoden automatisch alle virtuell sein sollen, dann müsste er doch nur den Konstruktor der Kindsklasse aufrufen, oder steh ich da auf dem Schlauch?!
Grüße,
Nova(Java ist irgendwie komisch )
-
Hi
Nun springt er mir aber zuerst in den Konstruktor von meiner Elternklasse und danach in die Kindsklasse.
Das dürfte normalerweise nicht sein.
Es wird immer der Konstruktor der Klasse aufgerufen die du angibst.Am besten ist es wenn du bischen Code zeigen würdest z.B den Konstruktor der Unterklasse und der Oberklasse.
P.S: Java ist nicht Komisch, hab bis jetzt kein Witz von Ihm/Ihr gehört.
-
Original erstellt von CoTech:
**
Das dürfte normalerweise nicht sein.
**Doch, das ist schon richtig so! Am Anfang eines Konstruktors ist im Prinzip ein virtuelles "super();" zu finden, es sei denn, man hat selbst eins hingeschrieben.
EDIT:
BTW: Ein Konstruktor ist kein guter Ort für eine Eingabe! Wenn ein Objekt anhand der Eingabe erzeugt werden soll, dann macht man das besser vor dem Aufruf von "new" und übergibt dem Konstruktor dann einen String als Argument.
[ Dieser Beitrag wurde am 06.04.2003 um 21:34 Uhr von Gregor editiert. ]
-
Hi
Danke Gregor das wusste ich auch nicht.
Man lernt immer dazuAdios