Chriss123 Geschrieben 9. Mai 2013 Geschrieben 9. Mai 2013 (bearbeitet) Hallo, ich habe ein Programm, wo entsprechend Zahlen nacheinander addiert werden sollen. Allerdings soll nach jeder Eingabe einer Zahl nachgefragt werden, ob noch eine weitere Zahl eingegeben werden soll. Bei der Antwort "Ja" kann man dann eine weitere Zahl eingeben. Bei der Antwort "Nein" wird das bisherige Ergebnis ausgegeben. Mein Problem ist, dass die Abfrage zwar kommt, aber er dann jedes Mal raus geht aus der Schleife, egal ob "Ja" oder "Nein". Anbei mein bisheriger Quellcode. Würde mich freuen, wenn mir jemand helfen könnte. Vielen Dank im Voraus. import java.util.Scanner; public class addierencompare { public static void main(String[] args) { int zahl=0; int ergebnis=0; String antwort; Scanner einlesen = new Scanner(System.in); do{ System.out.println("Geben Sie eine Zahl ein: "); zahl = einlesen.nextInt(); System.out.println("Möchten Sie noch eine Zahl eingeben (Ja/Nein):"); antwort = einlesen.next(); if (antwort.compareToIgnoreCase("ja") == 0) { ergebnis = ergebnis + zahl; } else { ergebnis = ergebnis + zahl; System.out.println(" Sie haben Nein eingegeben, das Ergebnis lautet: " + ergebnis); } } while(antwort.compareToIgnoreCase("nein") != 0 && antwort.compareToIgnoreCase("ja") != 0); System.out.println("Sie haben " + antwort + " eingegeben"); } // end of main } // end of class addierencompare Bearbeitet 9. Mai 2013 von flashpixx Code-Tags Zitieren
flashpixx Geschrieben 9. Mai 2013 Geschrieben 9. Mai 2013 Bitte verwende Code-Tags, um Code korrekt da zu stellen. Der Fehler liegt in Deiner Abbruchbedingung der do-while-Schleife, diese ist so falsch formuliert. Zitieren
uenetz Geschrieben 9. Mai 2013 Geschrieben 9. Mai 2013 Servus, der Fehler ist in der fußgesteuerten Schleife. Es sollte: while(antwort.compareToIgnoreCase("nein") ); heißen. Gruß Zitieren
flashpixx Geschrieben 9. Mai 2013 Geschrieben 9. Mai 2013 @uenetz: Es ist nicht hilfreich, wenn Du hier die Lösung postest, damit kann der OP zwar den Fehler lösen, aber es versteht nicht warum Zitieren
uenetz Geschrieben 9. Mai 2013 Geschrieben 9. Mai 2013 Paaahhhh, da will man mal einmal nettsein Naja, also soooo schwer nachzuvollziehen ist das nun auch nicht. Zitieren
Chriss123 Geschrieben 9. Mai 2013 Autor Geschrieben 9. Mai 2013 Vielen Dank erstmal für die Antworten. Die Änderung mit while(antwort.compareToIgnoreCase("nein") ); hatte ich auch schon. Komischer weise funktioniert das nicht. Da kommt eine Fehlermeldung beim Compilieren. Mit folgender while-Bedingung funktioniert das Programm nun: while(antwort.compareToIgnoreCase("nein") != 0 || antwort.compareToIgnoreCase("ja") == 0); . Das müsste doch eigentlich auch richtig sein oder ? Zitieren
uenetz Geschrieben 9. Mai 2013 Geschrieben 9. Mai 2013 Grundsätzlich sollte man Fehlermeldungen lesen und dementsprechend auch darauf reagieren. Der Fehler kann nicht in der Schleifenbedingung liegen. Irgendeine Fehlermeldung ist eine ... Aussage, mit der niemand was anfangen kann. Zitieren
uenetz Geschrieben 9. Mai 2013 Geschrieben 9. Mai 2013 Servus Chriss123, ich habe das Ganze mal nachgebaut als Beispiel, wie man es machen könnte, oder auch die grundsätzliche Herangehensweise "wie man es übersichtlich gestaltet, oder gestalten könnte" aufgezeigt. Hier mein Beispiel: package AddierenCompare; public class Start { public static void main(String[] args) { Start prgname = new Start(); JaNein frage = new JaNein(); Addieren add = new Addieren(); do { add.Add(); System.out.println("Zwischenergebnis: " + add.summe); } while(frage.Wiederholen() == true); add.ShowResult(); System.out.println("Programm " + prgname.getClass().getName().toString() + " wurde beendet." ); } // end of main } // end of class Start package AddierenCompare; import java.util.Scanner; public class Addieren { public int summe = 0; public int Add() { Scanner einlesen = new Scanner(System.in); System.out.println("Bitte geben Sie eine Integer-Zahl ein: "); int wert = einlesen.nextInt(); return (this.summe += wert); } public void ShowResult() { System.out.println("Das Endergebnis lautet: " + this.summe); } } package AddierenCompare; import java.util.Scanner; public class JaNein { public boolean Wiederholen() { Scanner einlesen = new Scanner(System.in); boolean retval = false; System.out.println("Möchten Sie noch eine Zahl eingeben (Ja/Nein): "); String antwort = einlesen.next(); if(antwort.compareToIgnoreCase("ja") == 0) retval = true; return retval; } } Der Aufbau einer Code/Klassenstruktur hat viele Vorteile. U.A. den, dass man Fehler schneller entdecken kann, oder macht das Ganze besser lesbar. So, denn mal viel Erfolg mit Java Zitieren
flashpixx Geschrieben 9. Mai 2013 Geschrieben 9. Mai 2013 Naja, also soooo schwer nachzuvollziehen ist das nun auch nicht. Für einen Anfänger ist es durchaus wichtig zu lernen, wie man selbst den Fehler behebt. Es mag ja ein gut gemeinter Ratschlag sein, aber Du nimmst leider damit den Lerneffekt. Z.B. ist Dein Vorschlag mit Klassen schwierig nach zu vollziehen, wenn man nicht weiß was eine Klasse ist. Außerdem muss man eine Boolean-Variable nicht auf == true prüfen, denn sie enthält schon den passenden Wert, dieser Code ist somit überflüssig bei Dir. Gleiches gilt für deine JaNein Klasse, die Überprüfung auf == 0 braucht man nicht, da 0 / NULL als false definiert ist, d.h. eine einfache Negation reicht und macht Deine Booleanvariable retval überflüssig. Weiterhin erzeugst Du mit diesem Code bei jeder Iteration ein neues Scannerobjekt, das führt zu schnellem anwachsen den Speichers, d.h. es wäre sinnvoller nur ein Scannerobjekt zu erzeugen und dieses mehrfach zu verwenden, d.h. die Speichernutzung ist nicht sinnvoll. Zitieren
uenetz Geschrieben 9. Mai 2013 Geschrieben 9. Mai 2013 Das dies nicht der optimale Code ist, weiss ich. Das war auch nicht der Sinn der Übung Es geht vielmehr um die Lesbarkeit, Verständnis, lernen und der Gleichen. Zitieren
Chriss123 Geschrieben 9. Mai 2013 Autor Geschrieben 9. Mai 2013 Ich wollte mich noch mal für die vielen Antworten bedanken und nehme die Verbesserungsvorschläge gerne an. Mein Programm funktioniert, meine Frage wurde beantwortet. Somit kann das Thema geschlossen werden. Besten Dank Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.