# Problem mit while Schleife



## maximilian01 (1. Dez 2010)

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.


```
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 (1. Dez 2010)

Dein Problem liegt hier: 

```
if (frage=="Nein"){
```
Vergleiche Strings immer mit equals:

```
if (frage.equals("Nein")){
```

Außerdem stimmt hier was nicht:

```
return(a);
```


----------



## ARadauer (1. Dez 2010)

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


----------



## dehlen (1. Dez 2010)

Jap ARadauer hat recht du hast den zuweisungoperator anstatt des vergleichoperators benutzt
also == anstatt =


----------



## Andi_CH (2. Dez 2010)

```
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 (2. Dez 2010)

maximilian01 hat gesagt.:


> 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.
> 
> 
> ...




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.


```
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:

```
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 (2. Dez 2010)

Danke für die Antworten das Programm funktioniert jetzt wie es soll.
Jetzt muss ich die Wiederholung nur noch DAU sicher machen.


----------

