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

Status
Nicht offen für weitere Antworten.

SteeL1942

Aktives Mitglied
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
Java:
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
Java:
//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
Java:
//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
Java:
//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);
	}
}
 
Zuletzt bearbeitet:

Marco13

Top Contributor
*draufschau*

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

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

SlaterB

Gast
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

Aktives Mitglied
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...
 
S

SlaterB

Gast
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

Aktives Mitglied
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
 
Zuletzt bearbeitet:
S

SlaterB

Gast
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

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

Aktives Mitglied
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?
 
S

SlaterB

Gast
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

Java:
public void wichtigeMethode() {
new Ausgabe();
  ...

  if (irgendwas) {
    wichtigeMethode();
  }
}
 

SteeL1942

Aktives Mitglied
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?
 
S

SlaterB

Gast
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

Aktives Mitglied
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?
 
S

SlaterB

Gast
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

Aktives Mitglied
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
 
Zuletzt bearbeitet:
S

SlaterB

Gast
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

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

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

SlaterB

Gast
Java:
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

Aktives Mitglied
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...
 
S

SlaterB

Gast
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

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

Java:
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
	}
 
S

SlaterB

Gast
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

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

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


Java:
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");
	}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
A Zusammenspiel javafx Fenster Allgemeine Java-Themen 1
M StdDraw-Fenster schliessen Allgemeine Java-Themen 1
D Klassen 2 Fenster in GUI Allgemeine Java-Themen 3
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
T Fenster schließen verhindern Allgemeine Java-Themen 13
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
K Interface Fenster mit Regler Allgemeine Java-Themen 2
S BMI Rechner mit eclipse Visual Editor (Seperates Fenster) Allgemeine Java-Themen 7
F Fenster schließen bei Klick auf Kreuz Allgemeine Java-Themen 14
P Herausfinden, ob ein Process ein Fenster hat Allgemeine Java-Themen 1
K Doppeltes Fenster Allgemeine Java-Themen 3
F DOS-Fenster unterdrücke? Allgemeine Java-Themen 0
A Anderes Fenster neu laden Allgemeine Java-Themen 16
B Geöffnetes Fenster verifizieren Allgemeine Java-Themen 2
T LookAndFeel Java Skinning Fenster Allgemeine Java-Themen 13
M CapsLock abfragen wenn Fenster wieder aktiviert wird Allgemeine Java-Themen 5
E Prüfen ob Fenster mit Namen offen ist Allgemeine Java-Themen 2
N verdeckte Fenster werden im Vordergrund gezeichnet Allgemeine Java-Themen 6
N Fenster lädt nicht Allgemeine Java-Themen 28
J Zugriff auf Poker-Client Fenster Allgemeine Java-Themen 14
A Erkennen welches Fenster bei windowDeactivated aktiviert wird? Allgemeine Java-Themen 2
S Frage für ein popup Fenster Allgemeine Java-Themen 4
J Swing Wird invisible, nicht-ref. Fenster vom GC entfernt? Allgemeine Java-Themen 11
Z Fenster vergrößern und verkleiern Allgemeine Java-Themen 14
A Zeichen beim Eingeben in ein DOS-Fenster nicht anzeigen? Allgemeine Java-Themen 3
J X11 app in Java Fenster Allgemeine Java-Themen 4
R Von Java aus Browser Fenster oeffnen und Webseite ausgeben? Allgemeine Java-Themen 2
H Fenster focus Allgemeine Java-Themen 5
Escorter .jar Datei Classpath mitgeben ohne Dos Fenster Allgemeine Java-Themen 8
ARadauer Fenster suchen und Verschieben Allgemeine Java-Themen 6
G Keyboard Shortcut (bei nicht aktivem fenster) Allgemeine Java-Themen 2
Steev Screenshot vom Bereich behind dem aktuellen Fenster machen Allgemeine Java-Themen 24
D Welches Fenster ist im moment aktiv? Allgemeine Java-Themen 11
T Java Fenster Allgemeine Java-Themen 5
C Fenster öffnen Allgemeine Java-Themen 4
P Login- Fenster Allgemeine Java-Themen 11
B kleines modales transparents Fenster ohne rahmen und buttons Allgemeine Java-Themen 15
J text aus externem fenster lesen Allgemeine Java-Themen 3
F neues fenster Allgemeine Java-Themen 3
P JTabbedPane Fenster minimieren Allgemeine Java-Themen 15
K Warten auf die Eingabe aus Fenster.... Allgemeine Java-Themen 2
M neue Thread in neuem Fenster Allgemeine Java-Themen 3
MQue Fenster aufklappen Allgemeine Java-Themen 3
C Fenster blinken lassen Allgemeine Java-Themen 2
T Explorer-Fenster öffnen mit Java Allgemeine Java-Themen 9
S Windows Fenster finden Allgemeine Java-Themen 9
E Wie bekomme ich mein Image in das Fenster Allgemeine Java-Themen 2
E Mit Button ein Fenster öffnen Allgemeine Java-Themen 4
G Java Fenster öffnen nach Iconklick(desktop) (helppls) Allgemeine Java-Themen 3
G Das aktuelle Fenster drucken Allgemeine Java-Themen 13
G mehrere JPanels als Fenster benutzen Allgemeine Java-Themen 3
M ALT-F4 fenster schließen unterdrücken Allgemeine Java-Themen 2
S Swing - Problem mit Fenster-/Komponenten-Größe Allgemeine Java-Themen 3
M 2 verschiedene LookAndFeels in einem Fenster möglich? Allgemeine Java-Themen 6
G Leere Fenster (Keine Schrift, Reiter/ Buttons) bei Java Allgemeine Java-Themen 5
F Fenster friert ein! Allgemeine Java-Themen 2
K JAVA Fenster-Modi Allgemeine Java-Themen 5
S fenster umbenennen Allgemeine Java-Themen 4
J Fenster aufpopen lassen? Allgemeine Java-Themen 8
N Java Fenster schließen Allgemeine Java-Themen 2
B JNI: HWND von aufrufendem Fenster bekommen. Allgemeine Java-Themen 4
W Fenster (EXCEL) aktivieren Allgemeine Java-Themen 6
J Fenster mit paint Methode selbst zeichnen Allgemeine Java-Themen 3
G Fenster verbinden (docken) Allgemeine Java-Themen 4
G Fenster/Frame schließen Allgemeine Java-Themen 16
L Windows-Fenster "Arbeitsplatz" anzeigen Allgemeine Java-Themen 13
G Auf KeyEvent reagieren, wenn das Fenster nicht aktiv ist Allgemeine Java-Themen 8
C alle Fenster bleiben grau Allgemeine Java-Themen 4
G Fenster durch eigenen Button minimieren Allgemeine Java-Themen 6
G Popupmenü verschwindet... Allgemeine Java-Themen 2
M Eintrag verschwindet aus Liste Allgemeine Java-Themen 3
B UML: Main classe verschwindet nach code generierung nicht?! Allgemeine Java-Themen 4
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
kodela Textfeld nicht rechteckig Allgemeine Java-Themen 10
G Doppelklick auf Javaprogramm klapt nicht Allgemeine Java-Themen 1
W Timer terminiert nicht Allgemeine Java-Themen 5
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
W Überflüssige Deklaration vermeiden...war da nicht mal was? Allgemeine Java-Themen 3
N lwjgl kann textureSampler nicht finden Allgemeine Java-Themen 4
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
T .Jar kann man nicht ausführen Allgemeine Java-Themen 18
P JDK nicht installiert in Net Object Fusion Allgemeine Java-Themen 7
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
N Regex schlägt nicht an Allgemeine Java-Themen 10
Y Wieso krieg ich die Unit Tests nicht hin Allgemeine Java-Themen 55
D Erste Schritte Mp3 Datei kann nicht von der Festplatte geöffnet werden - mit ChatGPT erstellt Allgemeine Java-Themen 7
G Popup wird nicht sichtbar Allgemeine Java-Themen 9
8u3631984 Funktions Parameter mit Lombok "NonNull" annotieren wird in Jacococ Testcoverage nicht herausgefiltert Allgemeine Java-Themen 3
kodela String kann nicht zu Pfad konvertiert werden Allgemeine Java-Themen 16
M Apache Proxy Weiterleitung auf Tomcat funktioniert nicht wie gewünscht Allgemeine Java-Themen 1
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
OnDemand ApacheCommon FTP Client zuckt nicht Allgemeine Java-Themen 3
T JavaPoet - (noch) nicht existente Typen Allgemeine Java-Themen 2
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
C Was passt hier nicht bei der Calendar-Class Allgemeine Java-Themen 2
T Testing JUnit5: try ... catch arbeitet nicht sauber Allgemeine Java-Themen 6
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben