Problem mit while Schleife

maximilian01

Neues Mitglied
Hallo,
ich mache derzeit ein Programm mit einer while Schleife und ich bekomme es nicht hin, dass sich die while Schleife beendet. Am besten ich kopiere mal Ausschnitte aus dem Quelltext.

Java:
import java.util.*;


public class hauptprogramm
{
   
    int gewicht = 0;           
    double gebuehr = 0.0 ;
      
    boolean  a = true;
   
    public hauptprogramm()
    {
        while (a=true){
            gewicht = eingabe();
            gebuehr = verarbeitung(gewicht);
            ausgabe(gewicht, gebuehr);
            a= abfrage();
        }
    }
.....(Objekte vom Programm welche alle funtkionieren)

public boolean abfrage(){
        Scanner sc = new Scanner(System.in);
        String frage = "leer";
        System.out.print("Erneut starten?(Ja oder Nein) ");
        frage = sc.next();
        System.out.println(frage);
        if (frage=="Nein"){
            boolean a= false;
        } else{
            boolean a= true;
        }
        return(a);
        }
    

    }

Das Problem ist jetzt, dass der Wert a für die Schleife nicht korrekt neu geprüft wird oder ich ich habe was in der If Anweisung falsch gemacht.
Wenn ich Nein eingebe endet das Programm nicht sondern wiederholt die einzelnen Objekte von Hauptprogramm.

Erkennt jemand meinen Fehler ich blick da nicht mehr durch. :)
 

madboy

Top Contributor
Dein Problem liegt hier:
Java:
if (frage=="Nein"){
Vergleiche Strings immer mit equals:
Java:
if (frage.equals("Nein")){

Außerdem stimmt hier was nicht:
Java:
return(a);
 

ARadauer

Top Contributor
while (a=true){
das ist eine zuweisung
also
while (a==true){
oder einfach
while (a){
denn wenn a == true, ist a ja sowieso true
 

Andi_CH

Top Contributor
Java:
if (frage.equals("Nein")) ...

Daran stört mich eigentlich nur, dass "frage" ein ungeschickter Name ist - in grösseren Umgebungen ist es wichtig, dass Namen aussagekräftig sind. Das hat nichts mit Funktionalität sondern mit Wartbarkeit zu tun.

"antwort" währe da wohl besser geeignet.
 

Andi_CH

Top Contributor
Hallo,
ich mache derzeit ein Programm mit einer while Schleife und ich bekomme es nicht hin, dass sich die while Schleife beendet. Am besten ich kopiere mal Ausschnitte aus dem Quelltext.

Java:
	public boolean abfrage(){
		Scanner sc = new Scanner(System.in);
		String frage = "leer";
		System.out.print("Erneut starten?(Ja oder Nein) ");
		frage = sc.next();
		System.out.println(frage);
		if (frage=="Nein"){
			boolean a= false; // bringt nichts, weil die bei } zerstört wird
		} else{
			boolean a= true; // bringt nichts, weil die bei } zerstört wird
		}
		return(a); // Kennt a nicht
	}
Erkennt jemand meinen Fehler ich blick da nicht mehr durch. :)


Ein Fehler wurde noch nicht erwähnt:

Wenn du innerhalb von { } eine Variable deklarierst, gilt die ausserhalb nicht mehr
(Siehe Kommentar in deinem Code oben)

Im konkreten Fall löst du das ja sowieso anders.

Java:
public boolean abfrage(){
	Scanner sc = new Scanner(System.in);
	String frage = "leer";
	System.out.print("Erneut starten?(Ja oder Nein) ");
	frage = sc.next();
	System.out.println(frage);
	return !frage.equals("NEIN"); // oder return frage.equals("JA");
}

aber es gibt schon Fälle in denen man lokale Variablen braucht.
Die müssen aber an einem übergeordnete Ort deklariert sein
Das würde funktionieren:
Java:
	public boolean abfrage(){
		boolean a = false;
		Scanner sc = new Scanner(System.in);
		String frage = "leer";
		System.out.print("Erneut starten?(Ja oder Nein) ");
		frage = sc.next();
		System.out.println(frage);
		if (frage.equals("Nein"){
			a = false;
		} else{
			a = true;
		}
		return(a);
	}
 

maximilian01

Neues Mitglied
Danke für die Antworten das Programm funktioniert jetzt wie es soll.
Jetzt muss ich die Wiederholung nur noch DAU sicher machen. :)
 
Zuletzt bearbeitet:

Neue Themen


Oben