Operatoren in der While Schleife

Status
Nicht offen für weitere Antworten.

777

Bekanntes Mitglied
Ich komme nicht weiter:
Theoretisch dürfte der PC, das auf den Schirm geblitete Bild "Fliege" nur darstellen aber nie bewegen, da die Dinge innerhalb des Whilezweiges nie "true" werden.
Tut er aber doch: Warum?!?!!?

cya
David


Code:
....
public void run()
{
    
    while(true)
    {
    zufall2= (int)(Math.random()*10+1);





     switch(zufall2)
     {
     case 1:
            while(zufall!=1||zufall!=2||zufall!=3||zufall!=4||zufall!=5||zufall!=6||zufall!=7||zufall!=8||zufall!=9||zufall!=10)
            {
                posx++;    
                posy++;    
                //Fliege neu bliten:    
                try{
                Flieg.sleep(500);
                }
                catch(InterruptedException e)
                {
                }
                repaint();
   
            }
                
     break;
     
     case 2:
            while(zufall!=1||zufall!=2||zufall!=3||zufall!=4||zufall!=5||zufall!=6||zufall!=7||zufall!=8||zufall!=9||zufall!=10)
            {
            posx++;    
            posy--;    
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
      
            }
                
     break;
     
     case 3:
            while(zufall!=1||zufall!=2||zufall!=3||zufall!=4||zufall!=5||zufall!=6||zufall!=7||zufall!=8||zufall!=9||zufall!=10)
            {
            posx--;    
            posy--;    
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
       
            }
                
     break;
     
     case 4:
            while(zufall!=1||zufall!=2||zufall!=3||zufall!=4||zufall!=5||zufall!=6||zufall!=7||zufall!=8||zufall!=9||zufall!=10)
            {
            posx--;    
            posy++;    
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
                    
            }
                zufall = (int)(Math.random()*10);
                break;
            
                 case 5:
            while(zufall!=1||zufall!=2||zufall!=3||zufall!=4||zufall!=5||zufall!=6||zufall!=7||zufall!=8||zufall!=9||zufall!=10)
            {
            posx--;    
   
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
                    
            }

                break;
                 case 6:
            while(zufall!=1||zufall!=2||zufall!=3||zufall!=4||zufall!=5||zufall!=6||zufall!=7||zufall!=8||zufall!=9||zufall!=10)
            {
   
            posy++;    
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
                    
            }

                break;
                             case 7:
            while(zufall!=1||zufall!=2||zufall!=3||zufall!=4||zufall!=5||zufall!=6||zufall!=7||zufall!=8||zufall!=9||zufall!=10)
            {
   
            posy=posy+2;   
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
                    
            }

                break;
                
            
                             case 8:
            while(zufall!=1||zufall!=2||zufall!=3||zufall!=4||zufall!=5||zufall!=6||zufall!=7||zufall!=8||zufall!=9||zufall!=10)
            {
   
            posy=posy-2;   
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
                    
            }

                break;
                             case 9:
            while(zufall!=1||zufall!=2||zufall!=3||zufall!=4||zufall!=5||zufall!=6||zufall!=7||zufall!=8||zufall!=9||zufall!=10)
            {
   
            posx=posx+2;    
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
                    
            }

                break;
            
                             case 10:
            while(zufall!=1||zufall!=2||zufall!=3||zufall!=4||zufall!=5||zufall!=6||zufall!=7||zufall!=8||zufall!=9||zufall!=10)
            {
   
            posx=posx-2;    
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
                    
            }


            

     break;
     default: break;
     }
  
    }
}


public void paint(Graphics g)
{
Image fly = getImage(getCodeBase(),"fliege.jpg");
g.drawImage(fly,posx,posy,this);
zufall = (int)(Math.random()*10+1);
ausgabe.setText(""+zufall);
}

public void start()
{
Flieg = new Thread(this);
Flieg.start();
}

}
 

Leroy42

Top Contributor
Ich habe zwar keine Ahnung was dein Programm bezwecken soll, auf jeden Fall
sind die Anweisungen der Art
Code:
 while(zufall!=1||zufall!=2||zufall!=3||zufall!=4||zufall!=5||zufall!=6||zufall!=7||zufall!=8||zufall!=9||zufall!=10)
schon äußerst suspekt. Warum schreibst du hier nicht einfach while (true) :cool:

while (zufall != 1) bedeutet, daß der Interpreter in der Schleife bleibt solange zufall nicht 1 ist
while (zufall != 2) bedeutet, daß der Interpreter in der Schleife bleibt solange zufall nicht 2 ist

while (zufall!=1 || zufall!=2) bedeutet dementsprechend, daß die Schleife nie verlassen wird.

Anders gesagt, die Schleife wird verlassen wenn !(zufall!=1 || zufall!=2) wahr ist.
Nach deMorgan also wenn (zufall==1 && zufall==2) ist.

Erklär mir mal wie zufall gleichzeitig 1 und 2 sein kann ???:L

Die einzige Möglichkeit wäre wenn zufall nicht-lokal ist und in einem anderen Thread während
der Abfrage geändert wird; damit würde die Eigenschaft gleichzeitig ja entfallen.

Überleg dir lieber nochmal was genau deine while-Bedingung bedeuten soll
 

777

Bekanntes Mitglied
Eigentlich sollte mein Programm bedeuten, dass der Interpreter NIE in die Schleife kommt, weil er ja so lange drin bleibt, wie das alles NICHT 1,2,3 und so weiter ist.
Also müsste er doch direkt wieder herausspringen.
Was genau das Programm bedeutet?
Es soll ein Spiel werden- aber das dauert noch...

Ich bin jetzt schon so weit, wie ich kommen wollte: Das die Fliege per Zufall ihren Kurs ändert:


Code:
     switch(zufall2)
     {
     case 1:
            while(zufall!=1)
            {
                posx++;    
                posy++;    
                //Fliege neu bliten:    
                try{
                Flieg.sleep(500);
                }
                catch(InterruptedException e)
                {
                }
                repaint();
   
            }
                
     break;
     
     case 2:
            while(zufall!=1)
            {
            posx++;    
            posy--;    
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
      
            }
                
     break;
     
     case 3:
            while(zufall!=1)
            {
            posx--;    
            posy--;    
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
       
            }
                
     break;
     
     case 4:
            while(zufall!=1)
            {
            posx--;    
            posy++;    
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
                    
            }
                zufall = (int)(Math.random()*10);
                break;
            
                 case 5:
            while(zufall!=1)
            {
            posx--;    
   
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
                    
            }

                break;
                 case 6:
            while(zufall!=1)
            {
   
            posy++;    
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
                    
            }

                break;
                             case 7:
            while(zufall!=1)
            {
   
            posy=posy+2;   
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
                    
            }

                break;
                
            
                             case 8:
            while(zufall!=1)
            {
   
            posy=posy-2;   
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
                    
            }

                break;
                             case 9:
            while(zufall!=1)
            {
   
            posx=posx+2;    
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
                    
            }

                break;
            
                             case 10:
            while(zufall!=1)
            {
   
            posx=posx-2;    
            //Fliege neu bliten:    
            try{
            Flieg.sleep(zeit);
            }
            catch(InterruptedException e)
            {
            }
            repaint();
                    
            }


            

     break;
     default: break;
     }
  
    }
 

Leroy42

Top Contributor
Nachtrag:

Wenn der Interpreter in eine der inneren Schleifen eintritt, wie soll er da jemals
wieder herauskommen :shock: Die Variable zufall wird innerhalb der Schleifen
nie verändert.

Und noch ein Tip(p) zum Programmierstil. Anstatt 10 fast identische
Schleifenkörper zu schreiben die sich nur darin unterscheiden wie die x-y-Werte
pro Durchlauf verändert werden, versuch doch mal diesen Teil auszuklammern.

Beispiel:

Code:
static final int[][] delta = {
	{+1,+1},{+1,-1},{-1,-1},{-1,+1},
	{-1, 0},{+1, 0},{ 0,+2},{ 0,-2},
	{+2, 0},{-2, 0}};
	
public void run() {
	while (true) {
		int zufall2 = (int)(Math.random()*10);
		while ("wasAuchImmer") {
			posx += delta[zufall2][0];
			posy += delta[zufall2][1];
			repaint();
			try {Flieg.sleep(500);} catch(InterruptedException e) {}
		}
	}
}
 

777

Bekanntes Mitglied
Diese Syntax verstehe ich noch nicht, da ich erst vor kurzer Zeit mit Java angefangen habe...
 

Leroy42

Top Contributor
Das Konstrukt ist ein 2-dimensionales Array (Feld) in dem die deltas (Unterschiede)
zwischen den alten und neuen x und y Werten gespeichert sind.

Aber wenn du noch keine Arrays hattest, vergiß es (vorläufig :cool: )

Der Punkt ist, daß du den gemeinsamen Teil der inneren Schleifen
nur einmal schreibst und die Fallunterscheidung in die eine Schleife
hineinziehst. Also

Code:
public void run() {
	while (true) {
		int zufall2 = (int)(Math.random()*10);
		while ("wasAuchImmer") {
                           switch (zufall2) {
                               case 0 : posx += 1; posy += 1; break;
                               case 1 : posx += 1; posy += -1; break;
                               case 2 : posx += -1; posy += -1; break;
                               case 3 : posx += -1; posy += 1; break;
                               ...
                           }
			repaint();
			try {Flieg.sleep(500);} catch(InterruptedException e) {}
		}
	}
}

Der Vorteil ist die Übersichtlichkeit, ersparte Schreibarbeit und Vermeidung
von Redundanz. Falls du den gemeinsamen Teil (repaint, sleep) ändern mußt
brauchst du dies nur einmal zu tun und es kann nicht passieren daß von deinen
9 Kopien deines codes versehentlich eine vergißt zu ändern.

Merksatz: Oberste Tugend eines Programmierers == Faulheit :cool:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H While Schleife mit Operatoren Java Basics - Anfänger-Themen 14
B Spielereien mit bit wise Operatoren und langen Binärzahlen Java Basics - Anfänger-Themen 3
K Für was braucht man die left und right shift operatoren? Was bringen die, also welchen Zweck haben die? Java Basics - Anfänger-Themen 15
Kleinerals2 NaN Operatoren Java Basics - Anfänger-Themen 3
S Und-Abfrage mit mehreren Ungleich-Operatoren Java Basics - Anfänger-Themen 17
P Datentypen, Klassen, Operatoren, Wrapperklassen Java Basics - Anfänger-Themen 2
D Erste Schritte Operatoren zur Manipulation von Bits "~" Java Basics - Anfänger-Themen 5
M Operatoren Umwandlung div. Operatoren Java Basics - Anfänger-Themen 7
V Operatoren Was will mir die Tabelle in meinem Lehrbuch sagen? (logische Operatoren) Java Basics - Anfänger-Themen 4
S Bitweise Operatoren" >>>",">>","<<" erklärung Java Basics - Anfänger-Themen 5
G operatoren Java Basics - Anfänger-Themen 3
beatles Operatoren Operatoren - Berechnung Java Basics - Anfänger-Themen 40
T Verständnisfrage Zuweisungs-/arithmet. Operatoren Java Basics - Anfänger-Themen 2
X Shift-Operatoren Java Basics - Anfänger-Themen 1
P Bitweise Operatoren Java Basics - Anfänger-Themen 2
Phillip Bitweise Operatoren Java Basics - Anfänger-Themen 11
C Operatoren Java Basics - Anfänger-Themen 6
P Taschenrechner, operatoren Java Basics - Anfänger-Themen 4
M Einfache und Doppelte Operatoren Java Basics - Anfänger-Themen 3
S Operatoren & Terminierung Java Basics - Anfänger-Themen 1
A Bitweise Operatoren Java Basics - Anfänger-Themen 1
O Priorität bei Operatoren Java Basics - Anfänger-Themen 4
N Potenzierung durch einfache Operatoren Java Basics - Anfänger-Themen 13
B Geschwindigkeitsabhängigkeit von Anz. d. Operatoren pro Zeile Java Basics - Anfänger-Themen 12
M hexadezimal in binär mit Hilfe von Shift-Operatoren Java Basics - Anfänger-Themen 6
S Arithmetische Operatoren Java Basics - Anfänger-Themen 7
L Erste Schritte Fragen zu Arrays, Inkrement Operatoren, Dekrement Operatoren ? Java Basics - Anfänger-Themen 9
lulas[]args Fehler - Logische Operatoren Java Basics - Anfänger-Themen 9
H Nur Zahlen, Klammern und Operatoren Java Basics - Anfänger-Themen 3
D Frage zu Bit Operatoren in der Programmierung Java Basics - Anfänger-Themen 9
P Anzahl der else if Operatoren begrenzt?? Java Basics - Anfänger-Themen 7
L [Logische Operatoren] referenzierbar? Java Basics - Anfänger-Themen 3
W Was tun die Operatoren ? und : (Bedingungen) Java Basics - Anfänger-Themen 15
W Datentypen Operatoren für eigenen Datentyp nutzen Java Basics - Anfänger-Themen 2
G Logische und Bitweise Operatoren Java Basics - Anfänger-Themen 2
S Datentypen Operatoren und Ausdrücke (formel richtig rechnen) Java Basics - Anfänger-Themen 8
E Logische Operatoren && und & Java Basics - Anfänger-Themen 14
? Operatoren && || Java Basics - Anfänger-Themen 10
M Aufgabe Arithmetische Operatoren Java Basics - Anfänger-Themen 12
T Rechnen mit Operatoren Java Basics - Anfänger-Themen 2
M Arithmetische Operatoren Java Basics - Anfänger-Themen 40
V Sonderzeichen als eigene "Operatoren" im JTextField Java Basics - Anfänger-Themen 4
M Sind ternäre Operatoren für einen guten Programmierstil wichtig ? Java Basics - Anfänger-Themen 10
E IF Anweisung mit logischen Operatoren Java Basics - Anfänger-Themen 18
JStickman Was bringen Bit-Operatoren? Java Basics - Anfänger-Themen 14
J Matheaufgabe aus String mit mehreren Operatoren Java Basics - Anfänger-Themen 16
D Logische Operatoren Java Basics - Anfänger-Themen 6
D Grundlagen - Operatoren Java Basics - Anfänger-Themen 5
1 Datentypen Rückgabetyp von Java-Operatoren Java Basics - Anfänger-Themen 2
V Bitweise Operatoren in der Grafikprogrammierung Java Basics - Anfänger-Themen 2
SebSnake Operatoren für eigene Datentypen Java Basics - Anfänger-Themen 3
M logische operatoren Java Basics - Anfänger-Themen 2
C Variablen für Operatoren Java Basics - Anfänger-Themen 3
W Rangfolge von Operatoren Java Basics - Anfänger-Themen 16
N zahlen und operatoren gemischt in einem Feld Java Basics - Anfänger-Themen 9
T Logische Operatoren Java Basics - Anfänger-Themen 39
C Dynamische Operatoren! Java Basics - Anfänger-Themen 5
G Shift Operatoren Java Basics - Anfänger-Themen 4
R Bedingte Opeatoren / Verschachtelte Operatoren Java Basics - Anfänger-Themen 4
H Postfix Operatoren Java Basics - Anfänger-Themen 2
S Variablen + Operatoren "mixen" Java Basics - Anfänger-Themen 5
F Experimente mit Bit-Operatoren Java Basics - Anfänger-Themen 7
G Nutzen von bitweisen Operatoren Java Basics - Anfänger-Themen 8
J Operatoren in Java Java Basics - Anfänger-Themen 2
S Verwendung bitweiser Operatoren Java Basics - Anfänger-Themen 6
R Binäre logische Operatoren Java Basics - Anfänger-Themen 21
M While-Schleife mit Wartezeit Java Basics - Anfänger-Themen 15
Ranger229 Endless loop in while Schleife Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
Ostkreuz While Schleife neustarten Java Basics - Anfänger-Themen 20
S Erste Schritte do-while Schleife Münzwurf Java Basics - Anfänger-Themen 1
S while Schleife Taschenrechner Java Basics - Anfänger-Themen 1
P Best Practice While loop schleife Java Basics - Anfänger-Themen 5
S Erste Schritte While Schleifen Java Basics - Anfänger-Themen 11
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
R do while Schleife Verständnisfrage Java Basics - Anfänger-Themen 2
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
Say do-while Syntak Java Basics - Anfänger-Themen 3
A Return in While Schleife Java Basics - Anfänger-Themen 6
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
J do..while Schleife Java Basics - Anfänger-Themen 14
W Wiederkehrende Konsolen-Anzeige mit do-While?! Java Basics - Anfänger-Themen 33
X Enum Abfrage ohne if, for, while oder switch Java Basics - Anfänger-Themen 21
java-starter Erste Schritte Mit While Schleifen Programme schreiben Java Basics - Anfänger-Themen 4
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
B Zuweisungen und Methodenaufrufe in Bedingung der while Schleife? Java Basics - Anfänger-Themen 2
JavaBeginner22 Würfeln bis 6 while Schleife Java Basics - Anfänger-Themen 13
G while.next() Verständnisfrage Java Basics - Anfänger-Themen 16
L while Schleife mit 2 Bedingung endet nicht Java Basics - Anfänger-Themen 3
D Array mit while-schleife Java Basics - Anfänger-Themen 12
B do while Schleife Java Basics - Anfänger-Themen 3
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
SergioCK Do while Schleife wiederholen Java Basics - Anfänger-Themen 14
Informatikf Methoden While Schleife Java Basics - Anfänger-Themen 3
M While Schleife? Java Basics - Anfänger-Themen 4
C Sind die while-Schleifen richtig in for-Schleifen ersetzt worden? Java Basics - Anfänger-Themen 8
Poppigescorn Quersumme Berechnen mit einer While Schleife Java Basics - Anfänger-Themen 13
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben