Kleine Verständnissfrage

Status
Nicht offen für weitere Antworten.

Tuvok

Mitglied
Hallo!

Ich hab eine kleine Verständnissfrage zu meinem vorliegenden Buch (Core Java) bin grad auf Seite 102 folgende. Da stellt sich mir eine kleine Frage die ich nicht so ganz verstehe.

Hier mal der Code
Code:
package whileschleife2;

import java.util.*;

public class Main {
   
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        
        System.out.println("Welchen Betrag wollen Sie jedes Jahr sparen?");
        double zahlung = in.nextDouble();
        
        System.out.println("Zinssatz in %");
        double zinsSatz = in.nextDouble();
        
        double saldo = 0;
        int jahr = 0;
        
        String input;
        
        // Saldo aktualisieren, solange Ziel noch nicht erreicht
        do {
            // Zahlung und Zins des aktuellen Jahres addieren
            saldo += zahlung;
            double zins = saldo * zinsSatz / 100;
            saldo += zins;
            
            jahr++;
            
            // Aktuellen Saldo ausgeben
            System.out.printf("Nach %d Jahren betraegt Ihr Guthaben %+,.2f%n", jahr, saldo);
            
            // Fragen ob bereit für den Ruhestand, und Eingabe holen
            System.out.println("Bereit fuer den Ruhestand? (J/N)");
            input = in.next();
        }
        while (input.equals("N"));
    }
    
}

Als kurze Erklärung, das Programm macht nichts anderes als einen Betrag einzulesen den man jedes Jahr sparen will und den entsprechenden Zinssatz dazu. Dannach rechnet das Programm das neue Guthaben aus und fragt ob man genug hat.

Ansich funktioniert auch alles so wie es soll, aber nun zu meiner Frage.

in.next(); ist dafür da mir ein einzelnes Zeichen einzulesen und in.nextLine(); um mir eine ganze Zeile einzulesen.
Wenn ich allerdings die Zeile 36 durch input = in.nextLine(); kann ich nichtsmehrs eingeben und die Schleife wird sofort beendet.

Warum ist das so? Es ist sicher ein Logikfehler meinerseits... aber welcher?

Schonmal Danke für Hilfe =)
 
G

Guest

Gast
Naja, genau genommen wird die Schleife ja nur abgebrochen, wenn die Eingabe ungleich "N" ist.

Das Problem ist, dass hier die ganze Zeile eingelesen wird. Also wenn du "N" eintippst und mit Enter bestätigst sieht der String so aus: "N\n" (das gelesene Zeichen und das \n für den Zeilenumbruch, der durch die Entertaste bewirkt wurde)
Da das immer ungleich N ist, ist die while-Bedingung nicht erfüllt und wird abgebrochen.
 

Tuvok

Mitglied
Ahja verstehe... danke :)
Aber das komische ist eigentlich das ich gar nicht erst die Möglichkeit habe etwas einzugeben, man kommt gar nicht dazu "N" einzugeben.
 
G

Gelöschtes Mitglied 5909

Gast
mach am besten noch ne boolean variable ende oder so, die du bei der eingabe von J (ja, abbrechen) auf true setzt.
Dann musst du unten in den schleifenkopf noch while(!ende) reinmachen
 
B

Beni

Gast
Ich würde vermuten, dass wenn du die anderen Zahlen eintippst, und ENTER drückst; nur die Zahl, aber nicht das ENTER gelesen wird. Wenn dann der Scanner "nextLine" lesen soll, ist noch das ENTER von früher in dem Buffer, und der Scanner gibt sofort "" zurück.
 

McLane

Mitglied
Als ich meinen ersten Post verfasste, habe ich übersehen, dass du die Klasse Scanner verwendest. Ich habe bisher für Tastatureingaben BufferedReader und InputStreamReader verwendet. Dann trifft das mit den Zeilenumbruchsymbol zu, aber bei der readLine() in Scanner sieht das anders aus.
Also vergiss am Besten das was ich zuerst geschrieben habe.

In der Java-Doku steht bei Scanner.readline():
...This method returns the rest of the current line, excluding any line separator at the end...
Also wird das Linebreak-Symbol am Ende abgeschnitten.

Aber nun zurück zum eigentlichen Problem:
Wenn ich die Doku richtig verstehe werden mit read(), readDouble(), ... eine Zeile (in deinem Beispiel von der Tastatur) eingelesen und das erste Token, also der Teilstring bis zum Trennsymbol, zurückgegeben.
Bei readLine() wird nichts von der Tastatur eingelesen, sondern nur der restliche String von der vorherigen Eingabe zurückgegeben.

Ob das jetzt 100-Prozentig so stimmt kann ich dir nicht sagen, da ich noch nicht mit der Klasse Scanner gearbeitet habe und die Doku auch nicht alle meine Fragen hierzu beantwortet, aber ein kleiner Heimversuch hat halt das geschilderte Verhalten wiedergespiegelt.

Übrigens meckert bei mir Eclipse an Zeile 32 deines Programms. Die sieht für mich auch mehr nach einem C- als nach einem Java-Programm aus :wink:

Ich hoffe, dass das Problem jetzt gelöst ist und dass ich nicht noch mehr Verwirrung gestiftet habe.
 
B

Beni

Gast
McLane, hast du die Features von Java 1.5 eingeschaltet in Eclipse? Das ist perfekter Java Code :bae:
 

Tuvok

Mitglied
raiL hat gesagt.:
mach am besten noch ne boolean variable ende oder so, die du bei der eingabe von J (ja, abbrechen) auf true setzt.
Dann musst du unten in den schleifenkopf noch while(!ende) reinmachen

Funktioniert nicht, da die Abfrage gar nicht erst kommt.

Beni hat gesagt.:
Ich würde vermuten, dass wenn du die anderen Zahlen eintippst, und ENTER drückst; nur die Zahl, aber nicht das ENTER gelesen wird. Wenn dann der Scanner "nextLine" lesen soll, ist noch das ENTER von früher in dem Buffer, und der Scanner gibt sofort "" zurück.

Danke :)
Das ist tatsächlich so, ne if Abfrage ala if (input.equals("")) ergibt in dem Fall true. Wenn man einen zweiten Scanner definiert, funktioniert es so wie vorgesehen.

Danke für die Hilfe, das trug bei mir einiges zum Verständniss zum Unterschied von next und nextLine bei.... =)


Edit: (Aus irgendwelchen Gründen wollte mein Browser mal nicht neuladen und hat mir den uralt Cache gezeigt)
Auch nochmal danke an McLane, so wie Beni schon gesagt hat ist (System.out.printf) eine Neuerung in Java 1.5. (steht ebenfalls so in meinem Buch drinnen)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Suche jemanden für kleine Uni-Abgabe/ mit Vergütung Java Basics - Anfänger-Themen 1
P eine kleine Aufgabe mit Audio Java Basics - Anfänger-Themen 1
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
J Kleine Frage zu OOP Java Basics - Anfänger-Themen 371
L Kleine Hilfe beim Schreiben eines Programmes benötigt :D Java Basics - Anfänger-Themen 40
M Welches Framework für kleine WebApp nutzen? Java Basics - Anfänger-Themen 6
D Kleine Probleme mit Split-Befehlen Java Basics - Anfänger-Themen 5
O Datei in mehrere kleine Dateien umwandeln Java Basics - Anfänger-Themen 47
CptK Interface Kleine Kreise in großem Kreis anordnen Java Basics - Anfänger-Themen 3
CT9288 Kleine Simulation programmieren, denkanstöße erbeten Java Basics - Anfänger-Themen 19
S Kleine Frage zu Threads Java Basics - Anfänger-Themen 3
T Klassen Kleine Übung zum Thema Klassen Java Basics - Anfänger-Themen 3
O Kleine Frage zu Iterator und Iterable Java Basics - Anfänger-Themen 6
O Kleine Frage zu cast Java Basics - Anfänger-Themen 3
U DOM Parser, kleine Frage Java Basics - Anfänger-Themen 29
N BierSpiel von "Kopf bis Fuss" eigener Code...kleine Problemstellung. Java Basics - Anfänger-Themen 11
Anfänger2011 2 kleine Fragen zu ArrayListen Java Basics - Anfänger-Themen 5
TheSorm Kleine Speicher Klasse Java Basics - Anfänger-Themen 24
F Speicherlast mehrere GB durch kleine png files? Java Basics - Anfänger-Themen 1
T Kleine Anfängerfrage :) Java Basics - Anfänger-Themen 4
T Kleine Klausurfragen Java Basics - Anfänger-Themen 17
T viele "kleine" Fragen... Java Basics - Anfänger-Themen 3
Q Vererbung Kleine Hilfe bei einer aufgabe Java Basics - Anfänger-Themen 5
DStrohma Best Practice Hibernate für kleine Anwendung nutzen? Java Basics - Anfänger-Themen 4
O Konsole - Kleine Frage Java Basics - Anfänger-Themen 22
N kleine get-Methode anhand einer Aufgabenstellung Java Basics - Anfänger-Themen 13
D Kleine Rechenregel... ++a Java Basics - Anfänger-Themen 4
ScottGambler Kleine Frage Java Basics - Anfänger-Themen 13
M Erste Schritte 2 Kleine Programme Java Basics - Anfänger-Themen 27
T Kleine Frage Java Basics - Anfänger-Themen 2
B Kleine Erklärung zu einer Codezeile benötigt Java Basics - Anfänger-Themen 5
A Java Flächeninhaltsberechnung kleine Frage Java Basics - Anfänger-Themen 8
H Datei in kleine Stücke teilen und wieder erkennen Java Basics - Anfänger-Themen 10
P eigene kleine Datenverwaltung Java Basics - Anfänger-Themen 5
K Erste Schritte Kleine Verständnisfrage Java Basics - Anfänger-Themen 12
S Erste Schritte Zwei kleine Fragen zu [], int und Konstruktor Java Basics - Anfänger-Themen 3
S Erste Schritte Kleine Problem mit Ausgabe in eine Datei Java Basics - Anfänger-Themen 11
G Kleine Java Programme aus Main Java Programm starten..... Java Basics - Anfänger-Themen 3
R Sehr kleine doubles nicht in Exponentialdarstellung ausgeben Java Basics - Anfänger-Themen 3
H Datenbank suche in kleine Schritte Java Basics - Anfänger-Themen 6
O kleine SwingFrame Java Basics - Anfänger-Themen 3
T Kleine Frage zu Collections Java Basics - Anfänger-Themen 3
J BlueJ! 2 kleine Fragen zum Spiel. Java Basics - Anfänger-Themen 3
J Kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
H Warum funktioniert diese kleine Methode nicht? Java Basics - Anfänger-Themen 8
E Kleine Hilfe für einen Einsteiger Java Basics - Anfänger-Themen 18
Luk10 Dateipfad beim Laden einer Datei + Neue kleine Frage! Java Basics - Anfänger-Themen 11
U actionListener - eine Kleine Frage Java Basics - Anfänger-Themen 7
M kleine Verständisfrage zur Klassenhierarchie, speziel JMenuItem Java Basics - Anfänger-Themen 8
J Kleine Frage zu Methoden & OOP Java Basics - Anfänger-Themen 4
B Paar kleine Grundsatzfragen zu Java Java Basics - Anfänger-Themen 5
M kleine und einfache Verständnisfrage Java Basics - Anfänger-Themen 3
S 2 kleine Methoden negieren und print Java Basics - Anfänger-Themen 8
J if und kleine double Werte Java Basics - Anfänger-Themen 7
H kleine zwischenfrage string Java Basics - Anfänger-Themen 3
ModellbahnerTT Kleine Frage zu doppelten Arrays Java Basics - Anfänger-Themen 3
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
M Kleine Konsole mit Threads + KeyAdapter Java Basics - Anfänger-Themen 6
hdi Kleine Design/Convention Frage zu Konstruktoren Java Basics - Anfänger-Themen 4
hdi kleine Verständnisfrage lokale + Member Variable Java Basics - Anfänger-Themen 10
R Kleine Frage zu Array Java Basics - Anfänger-Themen 2
B kleine Probleme beim auslesen einer m3u Datei Java Basics - Anfänger-Themen 3
G eine kleine verwaltung Java Basics - Anfänger-Themen 2
M Eine kleine Frage bzw kleine Theorie frage String[arg] Java Basics - Anfänger-Themen 6
Povlsen84 Initlialisierung, Vector, serialVersionUID . kleine Fragen Java Basics - Anfänger-Themen 4
M Kleine Anfängerfrage Java Basics - Anfänger-Themen 10
D kleine Passwortabfrage erstellen incl. Method zum verändern Java Basics - Anfänger-Themen 7
G jFTP - kleine Fragen Java Basics - Anfänger-Themen 2
P Eine kleine Frage. Java Basics - Anfänger-Themen 4
M kleine sql abfrage Frage Java Basics - Anfänger-Themen 5
K Kleine Fragen über Arrays Java Basics - Anfänger-Themen 8
Z kleine frage zu: Runtime.getRuntime().exec("cmd /c) Java Basics - Anfänger-Themen 3
M Zufallszahl - kleine Frage Java Basics - Anfänger-Themen 4
K Hallo, Ich suche kleine Java Program-Aufgaben zum üben ? Java Basics - Anfänger-Themen 4
S kleine suche Java Basics - Anfänger-Themen 9
D kleine spielerei mit swing Java Basics - Anfänger-Themen 5
A Kleine Tabelle . Java Basics - Anfänger-Themen 8
U kleine datenbank Java Basics - Anfänger-Themen 86
G kleine Frage Java Basics - Anfänger-Themen 4
Q Wie kann man eine kleine pause im Programm machen? Java Basics - Anfänger-Themen 13
J Kleine Connection Frage Java Basics - Anfänger-Themen 4
J kleine java aufgabe: ausgabe von sternchen Java Basics - Anfänger-Themen 20
P kleine db-aufgabe läuft nur suboptimal Java Basics - Anfänger-Themen 8
S ein paar kleine Fragen Java Basics - Anfänger-Themen 4
M Kleine Frage zu If-Bedingung Java Basics - Anfänger-Themen 4
X Kleine Frage: Split Java Basics - Anfänger-Themen 13
G sehr kleine Dezimalzahlen (BigDecimal) falsch angezeigt Java Basics - Anfänger-Themen 5
G Eigene kleine Sprache entwickeln Java Basics - Anfänger-Themen 6
J Große *.Text Datei zum verschicken in viele kleine Java Basics - Anfänger-Themen 7
A Noch ne kleine Beanshell Frage Java Basics - Anfänger-Themen 7
B eine kleine leichte aufgabe mit einem stack programmieren Java Basics - Anfänger-Themen 2
A Kleine Anfängerfragen u.a.: Kann man Random "speichern& Java Basics - Anfänger-Themen 6
S Kurze Verständnissfrage Java Basics - Anfänger-Themen 4
S Verständnissfrage equals() Java Basics - Anfänger-Themen 2
E Allgemein Verständnissfrage zum Ablauf mehrerer Threads Java Basics - Anfänger-Themen 4
T Variablen Verständnissfrage Konstanten Java Basics - Anfänger-Themen 6
L OOP Verständnissfrage Java Basics - Anfänger-Themen 8
D Julia- / Mandelbrotmenge Verständnissfrage Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben