Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo,

ich versuche mich gerade nach Jahren mal wieder in Java einzuarbeiten. Dabei bin ich auf ein (Anfänger)problem gestoßen, und trotz langem googeln und wühlen in Büchern (online und auf Papier ) finde ich nichts, was mir weiterhilft.

Ich erzeuge in dem Programm 2 Instanzen einer Klasse. Das Problem tritt im Konstruktor auf. Hier der (gekürzte ) Code, bei dem das Problem auftritt:


DataInputStream dis = new DataInputStream(System.in) ;

System.out.println(" gib das Alter ein") ;

this.alter = dis.readInt() ;                       //1. Hier wird ein weiteres Enter nötig

System.out.println("Gib die Zahnlaenge ein ") ;

this.zahnlaenge = dis.readFloat() ;	    //2. der Wert wird gar nicht übernommen	

this.name = name ;

System.out.println("mein Name ist "+this.name+" und meine Zaehne haben die Laenge "+this.zahnlaenge) ;

An der 1. Stelle wechselt der Curser, nach der Eingabe der Zahl, zwar die Zeile, die Ausgabe 'Gib die... ein' kommt aber erst nach einem weiteren Enter. An der 2. Stelle, wird die Zahl nicht übernommen, bzw der anschließend angezeigte Wert hat nichts mit der Eingabe zu tun. Ich erzeuge 2 Instanzen hintereinander. Wenn ich die 2. erzeuge, wird die Eingabe des Namens nicht gefordert. Hier steht wohl noch ein 2. Enter im Puffer (irgendwie so war das, aber genau weiß ich das auchnicht mehr ). Unten ist die Stelle, an der der Name gefragt, und anschließend der Konstruktor aufgerufen wird. (Ja ja die Objekte sind Meerschweinchen, ich hab halt Kinder ;) )

System.out.println(" gib den Namen Meerschweinschens ein ") ;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;

name = br.readLine() ;		// der Name wird beim 2. Aufruf nicht Gelesen, und ein leerer String ausgegeben

return  new Meerschweinchen(name) ;

Ich denke es ist nichts wirklich kompliziertes, aber alles wühlen im Netz und Buch hat halt nix geholfen.

LG

Paka

Ich denke mal, das liegt vor allem daran, dass der DataInputStream für deine Aufgabe nicht die richtige Klasse ist. Der DataInputStream ist dazu gedacht Daten wieder einzulesen die mit dem DataOutputStream gespeichert wurden.

Wenn du zb mal den DataOutputStream benutzt und verschiedene Datentypen in eine Datei schreibst, wirst du beim anschauen der Datei erkennen, dass diese nicht in Klartext abgespeichert wurden. Dementsprechend wirst du es also aber auch nicht schaffen, den DataInputStream dazu zu überreden deine Klartexteingaben richtig zu interpretieren.

Ich würde dir empfehlen für die Aufgabe die Scanner Klasse zu benutzen. Der musst du auch nur den passenden InputStream übergeben, in diesem Fall also System.in, und die Klasse bietet dann auch ähnliche Methoden wie der DataInputStream.

Scanner (Java Platform SE 6)

Vielen Dank, das Problem ist damit gelöst.

Ich habs it dem Scanner schon gestern morgen getestet, aber ganz vergessen zu posten.

LG

Paka

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.