# [Greenfoot] Zeitverzögerung



## Gamma (31. Okt 2009)

Hallo,
Weiß jemand warum folgender Code nicht funktioniert?


```
/**
 * Write a description of class Orange here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Orange  extends Actor
{

 /**
     * Act - do whatever the Orange wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
      for(int a = 0; a >= 10000000; a++)
      {
       
       int b = (int)(Math.random()*10)+1;
       int c = (int)(Math.random()*10)+1;
        
        setLocation(b,c);
        
        }
    }
    
    
}
```
Es passiert nichts
MfG Gamma


----------



## Landei (31. Okt 2009)

a *<=* 10000000

Bei solchen Problem hilft oft ein kleines System.out.println(".."), um zu sehen, ob er überhaupt in einer Schleife oder so reingeht...

Schöner als Math.random() ist eine statische Variable vom Typ java.util.Random, und daran nextInt(10) + 1 aufgerufen.


----------



## Gamma (31. Okt 2009)

Mit a=10; funktionierts auch nicht.
Mit next int kenn ich mich nicht aus.
Könntest dus mal in den Quellcode schreiben und diesen posten?

MfG Gamma


----------



## Landei (31. Okt 2009)

Du hast die Bedingung falsch herum. Du musst in der for-Scheife sagen, wie lange du *drinbleiben* willst, nicht, wann du raus willst. Schreib einfach <= statt >= und es sollte laufen.


----------



## Gamma (31. Okt 2009)

Ich hab grad gemerkt das Greenfoot das von selber macht und gar keine for schleife braucht


----------



## Gamma (1. Nov 2009)

Hab jetzt nochmal eine andere Frage zu Grennfoot:
Ich will erreichen, dass die Orange erst nach kurzer Zeit ihre Position ändert.
Hiermit aber verzögere ich nicht nur die Orange, sondern alles:


```
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.*;
/**
 * Write a description of class Orange here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Orange  extends Actor
{

 /**
     * Act - do whatever the Orange wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
      Greenfoot.delay(100);
       Random r = new Random();
       int b = Math.abs(r.nextInt()) % 10;
        Random s = new Random();
       int c = Math.abs(s.nextInt()) % 10;
              
        
         setLocation(b,c);
        
       
       

    
    
}}
```


----------



## ttplayer (1. Nov 2009)

Das ist vielleicht umständlich aber du kannst ja den Aufruf in einen neuen Thread machen:

```
Runnable run = new Runnable()   //neuer Thread
{
    act()
}
<Den Code, den du nebenher ausführen willst>
```


----------



## Gamma (1. Nov 2009)

Ich weiß jetzt nicht ganz genau wie du das meinst, aber so wie ich das verstanden hab gehts nicht, weil die klasse Orange Actor untergeordnet sein muss (extends Actor) sonst versteht er nicht mehr befehle wie setLocation(x,y).


----------



## ttplayer (1. Nov 2009)

Ich glaub, du hast mich falsch verstanden: Runnable ist keine Klasse, sondern ein Thread, der parallel zum anderen Code ausgeführt wird (wenn vorhanden, auf einem anderen Prozessorkern) also wird act aufgerufen und gleichzeitig schon mal unten weitergemacht


----------



## Gamma (1. Nov 2009)

Hab mir in der zwischenzeit ausgedacht, das man das ja auch mit schritten machen könnte (sry wenn ich nerve)
z ist die Schrittanzahl die in Spinne hochgezählt wird:

```
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.*;
import java.awt.*;
import java.awt.event.*;
/**
 * Write a description of class Orange here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Orange extends Spinne
{

    public void run()
    {int zero = 0;
     int g = z/5;  
     while(g > zero){  
     Random r = new Random();
     int b = Math.abs(r.nextInt()) % 10;
     Random s = new Random();
     int c = Math.abs(s.nextInt()) % 10;
              
        
         setLocation(b,c);
        }
        }
 /**
     * Act - do whatever the Orange wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */

    public void act() 
    {
     run();
    
}

}
```

Wenn ich Schritt 5 machen will stürtz greenfoot ab. Nur mit Reset gehts wieder, aber der Run und der Act button funktionieren nur nach Neustart. Was ist da los?


----------



## Verzweifelt (29. Sep 2012)

Hallo, wir haben zurzeit Greenfoot in der Schule (ich krankheitsbedingt leider nur teilweise) und die Hausaufgabe ist für mich unentschlüsselbar; könnt ihr mir erklären was 
/java
    public void schleife_a()
    {
          for(int i=0;i<4;i++)
          {
             bewegen();                                     
             akkuAufnehmen();                              
          }
    }


    public void schleife_b()
    {

          for(int j=4;j<5;j++)
          {
             bewegen();
             akkuAufnehmen();                              
          }
    }


    public void schleife_c()
    {
          for(int bla=-2;bla<3;bla+=2)
          {
             bewegen();
             akkuAufnehmen();                              
          }
    }


        public void schleife_d()
    {
          for(int i=5;i>0;i--)
          {
             bewegen();
             akkuAufnehmen();                              
          }
    }


        public void schleife_e()
    {
          for(int z=2;z<0;z+=10)
          {
             bewegen();
             akkuAufnehmen();                              
          }
    } 
/java


das "for(int klfjöalkjfd-a,.eoifaökl) heißt 


mfG


----------



## faustdonner (29. Sep 2012)

Mal ganz ehrlich! for ist eine der Kontrollschleifen die es in fast allen Programmiersprachen gibt. schon mal was von Google ist dein Freund gehört? Hat schon Milliarden von Menschen geholfen <.<.


----------

