Variable nach Schleife zurückgesetzt

Status
Nicht offen für weitere Antworten.

gnui

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

Code:
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
 
Du must mit == vergleichen

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

oder bei boolschen Werten einfach

Code:
      if (gewonnen) {
         System.out.println("GEWONNEN!");
      }
      else {
         System.out.println("VERLOREN!");
      }
 
Ich schau mir gerade deinen Quelltext an ...

Zu deiner ebend gestellten Frage: Initialisiere "gewonnen".

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

Code:
		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
		}
 
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.

Code:
boolean gewonnen = false;

Sollte es doch wider Erwarten klappen, wird true zurückgegeben.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben