Veröffentlicht 9. Mai 201312 j 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 201312 j von flashpixx Code-Tags
9. Mai 201312 j 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.
9. Mai 201312 j Servus, der Fehler ist in der fußgesteuerten Schleife. Es sollte: while(antwort.compareToIgnoreCase("nein") ); heißen. Gruß
9. Mai 201312 j @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
9. Mai 201312 j Paaahhhh, da will man mal einmal nettsein Naja, also soooo schwer nachzuvollziehen ist das nun auch nicht.
9. Mai 201312 j Autor 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 ?
9. Mai 201312 j 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.
9. Mai 201312 j 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
9. Mai 201312 j 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.
9. Mai 201312 j 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.
9. Mai 201312 j Autor 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.