# Variable nach Schleife zurückgesetzt



## gnui (17. Aug 2008)

Ich habe folgendes Problem. Und zwar habe ich eine boolsche Variable die innerhalb einer Schleife bestimmt wird, außerhalb dieser Schleife aber ausgewertet wird. Das Problem ist aber, dass nach Beendigung der Schleife die Variable zurückgesetzt wird, bzw die Änderungen in der Schleife sind nicht gemerkt werden.

Hier mal der Code dazu:


```
import java.util.*;

public class Testspiel {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] zahl;
		int kleinste = 101;
		String eingabe = new String();
			Scanner scanner = new Scanner(System.in);
		System.out.println("TEST:");
		zahl = new int[15];
		
		for (int i = 0; i < 15; i++) {
			zahl[i] = (int) ( Math.random()* 100 );	
			if (zahl[i] < kleinste) {
				kleinste = zahl[i];
			}
			System.out.println("Zahl " + (i+1) + ": " + zahl[i]);
		}
		System.out.println("Kleinste Zahl: " + kleinste);

		boolean gewonnen;

		schleife1:{
		for (int i = 0; i < 15; i++) {
			System.out.println(zahl[i]);
			eingabe = scanner.next();
			if ((eingabe.equals("j")) && (zahl[i] == kleinste)) {
				gewonnen = true;
				break schleife1;
			}
			if ((eingabe.equals("j")) && (zahl[i] != kleinste)) {
				gewonnen = false;
				break schleife1;
			}
		}
				}
		if (gewonnen = true) {
			System.out.println("GEWONNEN!");
		}
		if (gewonnen = false) {
			System.out.println("VERLOREN!");
		}
	}

}
```


Er zeigt nach der Schleife steht "gewonnen" an, egal was in der Schleife geschehen ist. Müsste nicht eigentlich die Variable für alle Schleifen gelten und beibehalten werden?

danke schonmal


----------



## Guest (17. Aug 2008)

Du must mit == vergleichen


```
if (gewonnen == true) {
         System.out.println("GEWONNEN!");
      }
      if (gewonnen == false) {
         System.out.println("VERLOREN!");
      }
```

oder bei boolschen Werten einfach


```
if (gewonnen) {
         System.out.println("GEWONNEN!");
      }
      else {
         System.out.println("VERLOREN!");
      }
```


----------



## gnui (17. Aug 2008)

wenn ich das so ändere sagt er mir dass "gewonnen" nicht initialisiert wurde


----------



## minzel (17. Aug 2008)

Ich schau mir gerade deinen Quelltext an ...

Zu deiner ebend gestellten Frage: Initialisiere "gewonnen".


```
boolean gewonnen = false;
```

Aber mal so eine Frage, was sollen die unteren Schleifen erreichen?

// EDIT
Hab es eben mitbekommen *g Jede menge geöffnete Views ^^ Evt. eine Eingabe-Aufforderung noch dazu schreiben.

// EDIT 2
Vieleicht als Denkanstoß für diese "schleife1"-Konstruktion:


```
InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader stdin = new BufferedReader(isr);

		// Anzahl der Durchläufe
		int runs = 10;
		
		// Eingabe vom Nutzer
		int entry = -1;

		try
		{
			for (int i = 0; i < runs; i++)
			{
				entry = Integer.valueOf( stdin.readLine() );
				
			}

		}
		catch (NumberFormatException e)
		{
			// Hier hat der Benutzer wohl keine Zahl eingegeben
		}
		catch (IOException e)
		{
			// Ein anderer Stacktrace
		}
```


----------



## Guest (17. Aug 2008)

gnui hat gesagt.:
			
		

> wenn ich das so ändere sagt er mir dass "gewonnen" nicht initialisiert wurde



Das ist auch richtig so, du hast _gewonnen _ keinen initialen Wert zugewiesen.

Da man als Programmierer Pessimist ist, geht man erstmal davon aus, daß etwas nicht klappt.


```
boolean gewonnen = false;
```

Sollte es doch wider Erwarten klappen, wird true zurückgegeben.


----------



## gnui (18. Aug 2008)

Vielen dank, es lag wirklich an dem vergessenen "= false".


----------

