# Fenster "verschwindet" nicht, trotz setVisible(false);



## SteeL1942 (9. Nov 2009)

erstmal vorweg: ich bin noch ein ziemlicher Java-Noob. hab ende August damit angefagen, als wir in der Schule damit angefangen haben...daher entschuldigt bitte, falls ich etwas ziemlich unqualifiziertes schreibe oder einfach "umständlich" programmiere.

Nun zu meinem Problem: Ich hab mir selber einen Generator geschrieben, der mir zufällig versch. Rennzusammensetzungen für Need for Speed generiert. An einer stelle möchte den befehl 
	
	
	
	





```
setVisible(false);
```
 benutzen, um ein Fenster wieder zu schließen. allerdings klappt das nicht. Die Fenster bleiben geöffnet.

Da das ganze in einer Art schleife geschrieben ist, die so lange läuft, bis eine passende zahl generiert wurde, kommt es schonmal vor, dass sich dann 20Fenster öffnen, aber nicht wieder schließen.

Ich weis nicht, ob der befehl an der stelle nicht läuft oder ich irgendwo anders einen Fehler gemacht habe. daher brauche ich eure hilfe...

Hier mal die Problem-Klasse (falls ihr die anderen Klassen auch braucht, bitte bescheid sagen)
Der Problem-Befehl befindet sich in Zeile 82!

Streckenwahl-Klasse

```
//Import von Paketen
import java.awt.*;
import java.awt.event.*;

public class Streckenwahl extends Frame {
	
	public static void main(String[] args){
		Streckenwahl s=new Streckenwahl ();
		s.starte();
		s.setSize(300,200);
		s.setVisible (true);
	}
    Panel sued;
    Panel center;
    Button EndeKnopf = new Button("Beenden");
    Button Start = new Button("Start");
    
    
   public static Checkbox Rundkurs;
   public static Checkbox Sprint;
   public static Checkbox URL;
   public static Checkbox StreetX;
   public static Checkbox Drag;
   public static Checkbox Drift;
   public static Checkbox DownHill;
    
// Konstruktor (besondere Methode)
public Streckenwahl () 
    {
        setTitle ("Renn-Typen Auswahl");
        sued = new Panel();
        center = new Panel();
        Rundkurs = new Checkbox("Rundkurs", true);        
        Sprint = new Checkbox("Sprint",true);
        URL = new Checkbox("URL");
        StreetX = new Checkbox ("StreetX", true);
        Drag = new Checkbox ("Drag", true);
        Drift = new Checkbox ("Drift");
        DownHill = new Checkbox ("DownHill");
    }

void starte()
{    
        setLayout (new BorderLayout());
        
        sued.add(Start);
        sued.add(EndeKnopf);
        center.setLayout( new GridLayout(7,1));
        center.add(Rundkurs);
        center.add(Sprint);
        center.add(URL);
        center.add(StreetX);
        center.add(Drag);
        center.add(Drift);
        center.add(DownHill);
        add("Center",center);
        add("South",sued);
        
        
        //Schalter
        Start.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
            	Einstellungen ee=new Einstellungen ();            	
        		ee.starte();
        		ee.setSize(300,200);
        		ee.setVisible (true);
        		//setVisible(false);
                      }});
   
        EndeKnopf.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                setVisible(false);
                dispose();         
                System.exit(0);
            }
        });
        
    }
}
```

Einstellungen-Klasse

```
//Import von Paketen
import java.awt.*;
import java.awt.event.*;
import java.util.Random;

public class Einstellungen extends Frame {

    Panel sued;
    Panel center;
    Button EndeKnopf = new Button("Beenden");
    Button gen = new Button("Generate");
    Button Zurueck = new Button ("Zurück");
    Random generator;
    
    static Checkbox ROUND;
    static Checkbox ko;
    static Checkbox KI;
    static Checkbox civ;
    static Checkbox reversed;
    public int Track;
    private int Gen;
// Konstruktor (besondere Methode)
public Einstellungen () 
    {
        setTitle ("NFS Race-Generator");
        sued = new Panel();
        center = new Panel();
        generator = new Random();
        ROUND = new Checkbox("mehr als 5 Runden");        
        ko = new Checkbox("Runden-KO zulassen",true);
        KI = new Checkbox("KI-Schwierigkeit generieren",true);
        civ = new Checkbox ("Verkehrsdichte generieren", true);
        reversed = new Checkbox ("Streckenumkehr zulassen", true);
    }

void starte()
{    
        setLayout (new BorderLayout());
        
        sued.add(gen);
        sued.add(Zurueck);
        sued.add(EndeKnopf);
        center.setLayout( new GridLayout(5,1));
        center.add(ROUND);
        center.add(ko);
        center.add(KI);
        center.add(civ);
        center.add(reversed);
        add("Center",center);
        add("South",sued);
        
        
        //Schalter
        gen.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){              
            	Ausgabe a=new Ausgabe (generator.nextInt(100)+1);            	
        		a.starte();
        		a.setSize(300,200);
        		a.setVisible (true);
        		setVisible(false);
                      }});
        
        Zurueck.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
            	Streckenwahl s=new Streckenwahl ();
        		s.starte();
        		s.setSize(300,200);
        		s.setVisible (true);
        		setVisible(false);
                      }});
   
        EndeKnopf.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                setVisible(false);
                dispose();         
                System.exit(0);
            }
        });
        
    }
private int Strecke()
{
		Gen = generator.nextInt(100)+1;
        System.out.println("Generierte Zahl: " +Gen);
        
        if(Gen<=31 && Streckenwahl.Rundkurs.getState()) //Prft ob Rundkurs generiert/ausgewhlt wurde
        {
        		Track = Gen;
        }
        else
        {
        	if(Gen<=54 && Streckenwahl.Sprint.getState()) //Prft ob Sprint generiert/ausgewhlt wurde
        	{
            		Track = Gen;
        	}
        	else
        	{
        		if(Gen<=65 && Streckenwahl.URL.getState()) //Prft ob URL generiert/ausgewhlt wurde
        		{
                		Track = Gen;
        		}
        		else
        		{
        			if(Gen<=73 && Streckenwahl.StreetX.getState()) //Prft ob StreetX generiert/ausgewhlt wurde
        			{
                    		Track = Gen;
        			}
        			else
        			{
        				if(Gen<=83 && Streckenwahl.Drag.getState()) //Prft ob Drag generiert/ausgewhlt wurde
        				{
                        		Track = Gen;
        				}
        				else
        				{
        					if(Gen<=94 && Streckenwahl.Drift.getState()) //Prft ob Drift generiert/ausgewhlt wurde
        					{
                            		Track = Gen;
        					}
        					else
        					{
        						if(Gen<=100 && Streckenwahl.DownHill.getState()) //Prft ob DownHill generiert/ausgewhlt wurde
        						{
                                		Track = Gen;
        						}
        					}
        				}
        			}
        		}
        	}
        }
	return Track;
}
}
```

Ausgabe-Klasse

```
//Import von Paketen
import java.awt.*;
import java.awt.event.*;
import java.util.Random;

public class Ausgabe extends Frame {
    
    Panel sued;
    Panel center;
    Button EndeKnopf;
    Button Zurueck;
    Button ReGen;    
    private Label Modus;    
    Random generator;
    int Track;
    int rounds;
    int Gen;
    static int typ;
    static int ko;
    
// Konstruktor
public Ausgabe () 
    {
        setTitle ("Ergebnis");
        
        generator = new Random();
        sued = new Panel();
        center = new Panel();
        EndeKnopf = new Button("Beenden");
        Zurueck = new Button ("Zurck");
        ReGen = new Button ("ReGen");
        
        Gen = generator.nextInt(100)+1;
        System.out.println("Generierte Zahl: " +Gen);
        
        if(Gen<=31 && Streckenwahl.Rundkurs.getState()) //Prft ob Rundkurs generiert/ausgewhlt wurde
        {
        		Track = Gen;
        }
        else
        {
        	if(Gen<=54 && Streckenwahl.Sprint.getState()) //Prft ob Sprint generiert/ausgewhlt wurde
        	{
            		Track = Gen;
        	}
        	else
        	{
        		if(Gen<=65 && Streckenwahl.URL.getState()) //Prft ob URL generiert/ausgewhlt wurde
        		{
                		Track = Gen;
        		}
        		else
        		{
        			if(Gen<=73 && Streckenwahl.StreetX.getState()) //Prft ob StreetX generiert/ausgewhlt wurde
        			{
                    		Track = Gen;
        			}
        			else
        			{
        				if(Gen<=83 && Streckenwahl.Drag.getState()) //Prft ob Drag generiert/ausgewhlt wurde
        				{
                        		Track = Gen;
        				}
        				else
        				{
        					if(Gen<=94 && Streckenwahl.Drift.getState()) //Prft ob Drift generiert/ausgewhlt wurde
        					{
                            		Track = Gen;
        					}
        					else
        					{
        						if(Gen<=100 && Streckenwahl.DownHill.getState()) //Prft ob DownHill generiert/ausgewhlt wurde
        						{
                                		Track = Gen;
        						}
        						else
        						{
        							Restart();
        						}
        					}
        				}
        			}
        		}
        	}
        }
        
        if(Einstellungen.reversed.getState()) //Prft ob Streckenumkehrung Aktiv ist
        {
        	typ = generator.nextInt(50);
        }
        else
        {
        	typ = 1;
        }
        
        
        if(Einstellungen.ko.getState()) // Prft ob Runden-KO zugelassen wird
        {
        	ko = generator.nextInt(50);
        }
        else
        {
        	ko = 50;
        }
        
        if(ko<=15) //Prft ob Rennen im KO-Modus gefahren wird
        {
        	rounds = 3;
        }
        else
        {
            if(Einstellungen.ROUND.getState()) //Prft ob Runden generiert werden sollen
            {
            	rounds = generator.nextInt(4)+7;
            }
            else
            {
            	rounds = generator.nextInt(4)+2;
            }
        }
        
        Modus = Labels.Modus(Track);               
    }

void starte()
{    
		
        setLayout (new BorderLayout ());
        center.setLayout(new GridLayout(6,1));
        center.add(Objekte.Car(generator.nextInt(20)+1));
        center.add(Modus);
        center.add(Objekte.Track(Track));
        if(Track<=31) // Prft auf Rundkurs
        {
            center.add(Objekte.Rounds(rounds));
        }
        else
        {
        	if(Track>=55 && Track<=73) //Prft auf URL
        	{
            		center.add(Objekte.Rounds(rounds));
        	}
        	else
        	{
        		if(Track>=84 && Track<=94)
        		{
            		center.add(Objekte.Rounds(rounds));
        		}
        	}
        }
        
        if(Einstellungen.civ.getState() && Track<55) //Prft ob Verkehr aktiviert wurde
        {
                center.add(Objekte.Civ(generator.nextInt(4)+1));
        }
        else
        {
        	if(Einstellungen.civ.getState() && Track>=95)
        	{
        		center.add(Objekte.Civ(generator.nextInt(4)+1));
        	}
        }
        if(Einstellungen.KI.getState()) //Prft ob Bots generiert werden sollen
        {
            	center.add(Objekte.KI(generator.nextInt(3)+1));
        }
        sued.add(ReGen);
        sued.add(Zurueck);
        sued.add(EndeKnopf);
        add("Center",center);
        add("South",sued);
        
        //Schalter
        Zurueck.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                Einstellungen m=new Einstellungen ();
                m.starte();
                m.setSize(300,200);
	            m.setVisible (true);
                setVisible(false);
            }
        });
        
        ReGen.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
            	Ausgabe a=new Ausgabe ();            	
        		a.starte();
        		a.setSize(300,200);
        		a.setVisible (true);
        		setVisible(false);
            }
        });
        
        EndeKnopf.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                setVisible(false);
                dispose();         
                System.exit(0);
            }
        });
    }

	private void Restart()
	{
		Ausgabe a=new Ausgabe ();            	
		a.starte();
		a.setSize(300,200);
		a.setVisible (true);
		setVisible(false);
	}
}
```


----------



## Marco13 (9. Nov 2009)

*draufschau*

a.setVisible (true);
setVisible(false);

Hab's nicht wirklich gelesen, aber .. einmal a., einmal nicht ... ???:L


----------



## SlaterB (9. Nov 2009)

a ist ein anderes Ausgabe-Fenster,
ist immer schlecht wenn ein Frame-Konstruktor noch mehr von sich selbst erstellt,

wichtig ist aber wahrscheinlich:
setVisible(false);
wird nur im Konstruktor aufgerufen, zu einem Zeitpunkt zu dem das Fenster noch gar nicht zu sehen ist,
NACH dem Konstruktor kommt dann wahrscheinlich der setVisible(true)-Aufruf, siehe Zeile 81, 
wenn für a im Konstruktor von Ausgabe (also Zeile 78 -> Zeile 82) setVisible(false); aufgerufen wurde, dann ist das irrelevant,
setVisible(true) kommt später dran (Zeile 81), das gilt 

am besten gar nicht im Konstruktor weitere eigene Objekte erzeugen,
das sollte, wenn das überhaupt Sinn macht, eine externe Methode abarbeiten,
die erzeugt 1-n Fenster in einem Array und kann dann für jedes Frame ganz in Ruhe entscheiden, ob es sichtbar ist oder nicht


----------



## SteeL1942 (10. Nov 2009)

Das Problem an sich hab ich jetzt erkannt. soweit schonmal danke für die hilfe. hab jetzt auch ne extra methode erstellt (hab den Code oben aktualisiert), die das dann ausführt, aber geändert hat sich nichts...

verstehe auch nicht was du mit Array meinst... hab das jetzt mal gegooglet, aber schlauer bin ich jetzt auch nicht...


----------



## SlaterB (10. Nov 2009)

wenn ne Frage besteht, so musst du die auf formulieren,

essentiell hilfreich könnte es sein, deinen aktuellen Code zu posten, insbesondere die neue Methode


----------



## SteeL1942 (10. Nov 2009)

Die Frage ist immernoch die gleiche wie vorher: Wie bekomme ich es hin, dass das fenster sich schließt?
und dann hat sich jetzt noch durch deinen beitrag die frage ergeben: was ist ein array und wie kann ihc das hierfür nutzen?
ich hatte auch geschrieben, dass ich den code oben im ersten post aktualiert habe^^... die methode heißt Restart und ist in der Klasse ganz unten


----------



## SlaterB (10. Nov 2009)

ob der Code direkt im Konstruktor steht oder in einer Methode, die vom Konstruktor aufgerufen wird, macht keinen Unterschied,

ich meinte das im Sinne von


```
public void wichtigeStartMethode() {

// 1-n Fenster anlegen, z.B. in einem Array
// für jedes Fenster entscheiden ob es angezeigt wird
}
```
wichtig ist dass der Konstruktor nichts mit der Sache zu tun hat,
aus zuvor genannten Gründen


----------



## SteeL1942 (10. Nov 2009)

das mit den mehreren fenster ist nicht so gut, weil die nötige anzahl ja immer variiert, da das ganze ja mit einem zafallsgenerator arbeitet... im prinzip soll er so lange generieren, bis eine passende zahl generiert wurde. wenn die zahl halt falsch ist, soll er das ganze im prinzip neu starten...

würd es was bringen, wenn ich den befehl weiter nach unten setzte? also in die starte() methode rein?


----------



## SlaterB (10. Nov 2009)

schau dir doch den Code an:
> a.starte();
> a.setSize(300,200);
> a.setVisible(true);

auch was in starte() passiert ist derzeit irrelevant wenn später immer setVisible(true); aufgerufen wird,

allerdings kannst du auch darauf verzichten, von außen am Ende setVisible(true); aufzurufen,
wenn das nur im Konstruktor bzw. besser am Ende von starte() passiert, dann kann das Objekt selber entscheiden,

auch starte() sollte dann nicht von außen aufgerufen werden, sondern vom Ende des Konstruktors aus, 
damit dort die Information, anzeigen oder nicht, übergeben werden kann,
bzw. wenn das Fenster nicht anzuzeigen ist, dann gar nicht erst starte() aufrufen

-------

ich empfehle dennoch dringend, dass ein Ausgabe-Objekt nicht weitere von sich selbst erzeugt,
egal wie kompliziert die Random-Logik ist, eine externe Methode kann das immer genauso machen, 
sogar ebenso rekursiv


```
public void wichtigeMethode() {
new Ausgabe();
  ...

  if (irgendwas) {
    wichtigeMethode();
  }
}
```


----------



## SteeL1942 (10. Nov 2009)

anstelle des "irgendwas" müsste ja dann  der generierte zahlenwert stehen... der wird aber erst in der klasse erstellt...

gibt es nichtt die möglichkeit, dass ich den konstruktor einfach nochmal neu starten kann, wenn die zahl nicht passt?


----------



## SlaterB (10. Nov 2009)

generator = new Random();
[..]
        Gen = generator.nextInt(100)+1;
        System.out.println("Generierte Zahl: " +Gen);
        if(Gen<=31 && [..]
[..]

dieser Code hat doch nichts mit einem Ausgabe-Objekt zu tun, den kann man genauso in einer anderen Methode steuern,
Konstruktor neu starten gibts nicht, nein

du machst das alles unnötig kompliziert,
wer baut schon ein Haus, und schaut dann nach, ob der Boden stabil oder das Bankkonto gedeckt ist,
das kann man doch vorher machen,
natürlich nicht im Konstruktor, denn da ist das Haus ja schon angefangen/ das Ausgabe-Objekt schon da,
aber es muss eben nix im Konstruktor gemacht werden, geht alles auch außerhalb


----------



## SteeL1942 (10. Nov 2009)

also soll ich diese if-sache in die kalsse packen, die "davor" ist? und wie bekomme ich es dann hin, dass er immerwieder neu generiert, wenn die zahl nicht passt?


----------



## SlaterB (10. Nov 2009)

na exakt genauso,
alles kann man coden wie es werden muss,

wenn ein Objekt erzeugt werden soll schreiben man new Object(),
wenn es von einer Bedingung abhängt, dann if,
wenn du wieder diese Rekursion haben willst, dann rufst du die Methode erneut auf (so wie du bisher vom Konstruktor wieder einen neuen Konstruktor aufrufst)

allgemeine Fragen 'wie programme ich ein Programm fertig' kann niemand exakt beantworten,
und was dein Programm überhaupt machen soll, weiß ich eh nicht,

fang doch nebenbei an, mit Worten zu beschreiben, was genau passieren soll,
was nicht bedeutet, dass ich danach etwas programmieren werden 

----

auch immer gut: einfach einfach einfach anfangen, es muss nicht sofort wieder die ganze Random-Geschichte sein,
wie wäre es mit einem einfachen Programm, welches ein Ausgabe-Fenster erzeugt und anzeigt,


----------



## SteeL1942 (10. Nov 2009)

also ich hab das ganze jetzt erstmal ohne das if-gedönse gemacht. also muss ich auch nix neu starten...
ich füg oben im ersten thread mal alle klassen hinzu, vll ist dann verständlicher, was ich vor habe. ich versuche es auch nochmal zu erklären:

Das Programm ist für Need for Speed Underground 2 und soll per zufallsgenerator versch strecken und autos generieren.
Wenn es gestartet wird, wird die Streckenwahl klasse angezeigt. dort soll man auswählen, welche Renntypen beim generieren zur verfügung stehen. nach nem klick auf start öffnet sich das zweite einstellungsfenster - mit dem habe ich an sich keine probleme. hier muss jetzt aber dieses if-zeug eingefügt werden.
dann soll die ausgabeklasse gestartet werden, die dann die generierten werte anzeigt.

EDIT: Die Klassen Objekte und Labels haben nicht mehr reingepasst. ich hab aber alle zusammen gezippt und an den ersten thread angehangen


----------



## SlaterB (10. Nov 2009)

wo in diesem Ablauf hat das bisherige Random-neue Ausgabe-usw. seinen Platz?

der ursprüngliche Code sah für mich so aus, als wenn mit jeder Ausgabe genau eine Strecke ausgewählt wird
wenn die nicht passt, dann diese Fenster weg und alles neu

denkbar einfacher Umbau: per Random und meinetwegen Schleife/ Rekursion eine Strecke auswählen,
dann genau EIN Fenster aufmachen und diesem die Strecke mitübergeben,
fertig


----------



## SteeL1942 (10. Nov 2009)

SlaterB hat gesagt.:


> wo in diesem Ablauf hat das bisherige Random-neue Ausgabe-usw. seinen Platz?
> 
> der ursprüngliche Code sah für mich so aus, als wenn mit jeder Ausgabe genau eine Strecke ausgewählt wird
> wenn die nicht passt, dann diese Fenster weg und alles neu
> ...



genau so habe ich das vor. in der Einstellungenklasse ist doch unten die Methode Strecke() - allerdings noch ohne schleife oder sonst was. nur die nackte if-geschichte. das programm ist im prinzip auch fertig. es muss nur noch die schleiße eingebaut werden, die den generator neu startet, falls der zahlenwert nicht passend ist. das bekomme ich allerdings nicht hin...


----------



## SlaterB (10. Nov 2009)

```
public Strecke findStrecke() {
  for (int i=0; i<1000; i++) {
     Random blah blah
     if (ok) {
       return was auch immer;
     } 
     // else automatisch neuer Schleifendurchlauf
  }
  // Exception: zu viele Versuche benötigt
}
```


----------



## SteeL1942 (10. Nov 2009)

das hilft mir nicht weiter. mit dem befehl for hab ich noch nie gearbeitet...

wozu ist denn das i? muss ich meine if-prüfung an stelle dem if(ok) schreiben?

sry, aber ich hab echt 0 ahnung...


----------



## SlaterB (10. Nov 2009)

oje

Schleifen sind in Kapitel 2.7
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 2.7 Schleifen
innerhalb Kapitel 2, Sprachbeschreibung, die absoluten Grundlagen

Grafische Oberflächen mit Swing ist dagegen erst Kapitel 16!
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 16 Grafische Oberflächen mit Swing

schreibe es doch einfach so hin und akzeptieren, dass es sich dann wiederholt,
Abbruch ist, wenn irgendwas returnt wird

und ja, statt 
> Random blah blah
>     if (ok) {
sollst du deinen sinnvollen Code reinschreiben, gerne auch wieder viele if/ else, falls es sein muss,


----------



## SteeL1942 (10. Nov 2009)

ich habs jez mal so eingetragen. jetzt heult er aber rum, dass er keinen return-wert hat...
irgendwas mach ich schon wieder falsch ;(


```
public int findStrecke() {
	  for (int i=0; i<1000; i++) {
		  Gen = generator.nextInt(100)+1;
		  if(Gen<=31 && Streckenwahl.Rundkurs.getState()) //Prft ob Rundkurs generiert/ausgewhlt wurde
	        	return Gen;
	        else
	        {
	        	if(Gen<=54 && Streckenwahl.Sprint.getState()) //Prft ob Sprint generiert/ausgewhlt wurde
	        		return Gen;
	        	else
	        	{
	        		if(Gen<=65 && Streckenwahl.URL.getState()) //Prft ob URL generiert/ausgewhlt wurde
	        			return Gen;
	        		else
	        		{
	        			if(Gen<=73 && Streckenwahl.StreetX.getState()) //Prft ob StreetX generiert/ausgewhlt wurde
	        				return Gen;
	        			else
	        			{
	        				if(Gen<=83 && Streckenwahl.Drag.getState()) //Prft ob Drag generiert/ausgewhlt wurde
	        					return Gen;
	        				else
	        				{
	        					if(Gen<=94 && Streckenwahl.Drift.getState()) //Prft ob Drift generiert/ausgewhlt wurde
	        						return Gen;
	        					else
	        					{
	        						if(Gen<=100 && Streckenwahl.DownHill.getState()) //Prft ob DownHill generiert/ausgewhlt wurde
	        							return Gen;
	        					}
	        				}
	        			}
	        		}
	        	}
	        } 
	     // else automatisch neuer Schleifendurchlauf
	  }
	  // Exception: zu viele Versuche benötigt
	}
```


----------



## SlaterB (10. Nov 2009)

schreibe nach Zeile 38

throw new RuntimeException("nach 1000 Versuchen immer noch keine Strecke gefunden, das ist doch nicht gut");

falls du mehr Wiederholungen brauchst, erhöhe die Zahl 1000


----------



## SteeL1942 (10. Nov 2009)

joa, jetzt klappts. allerdings scheint er die ifs zu ignorieren. selbst wenn ich in streckenwahlfenster nur rundkurs anwähle, gibt er wahrlos auch andere zahlen weiter...


----------



## SteeL1942 (10. Nov 2009)

Soo. hab das Problem gelöst. wusste garnicht, dass mann solche komplexen verknüfungen bei den ifs machen kann....



```
public static int findStrecke() {
	  for (int i=0; i<1000; i++) {
		  Gen = generator.nextInt(100)+1;
		  System.out.println(Gen);
		  if((Gen<=31 && Streckenwahl.Rundkurs.getState()) || (Gen>=32 && Gen<=54 && Streckenwahl.Sprint.getState()) || (Gen>=55 && Gen<=65 && Streckenwahl.URL.getState()) || (Gen>=66 && Gen<=73 && Streckenwahl.StreetX.getState()) || (Gen>=74 && Gen<=83 && Streckenwahl.Drag.getState()) || (Gen>=84 && Gen<=94 && Streckenwahl.Drift.getState()) || (Gen>=95 && Gen<=100 && Streckenwahl.DownHill.getState()))
	        	return Gen;
	         
	     // else automatisch neuer Schleifendurchlauf
	  }
	  throw new RuntimeException("nach 1000 Versuchen immer noch keine Strecke gefunden, das ist doch nicht gut");
	}
```


----------

