durchlaufen einer methode zählen

  • Themenstarter Themenstarter kev003
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
K

kev003

Gast
guten tag,

ich habe mal wieder eine frage. 😳 diesmal geht es eigentlich um eine einfache angelegenheit. ich ärgere mich selber, dass es nicht klappt, weil es eigentlich echt einfach ist. ich möchte das durchlaufen einer methode in einer klasse zählen und dann im "hauptprogramm" ausgeben. leider zählt er nicht, sondern gibt immer s = 0 aus.

hier die klasse:
Code:
public class RandomTurtle extends PathTurnTurtle
{   
    // attention: an own class PathTurnTurtle (an extension of
    // class TurnTurtle must exist (see TA 3.1) !! 
    // instance of class Random
    Random dice = new Random();
	int s;
    /** constructor
     *  @param screen: screen of the turtle
     */
    public RandomTurtle(TurtleScreen screen)
    {
	super(screen);
    }
    
    /** distance between turtle and starting point 
     *  @param startx:  x coordinate of starting point
     *  @param starty:  y coordinate of starting point
     *  @return: compute the distance between turtle and 
     *  starting point; return the value
     */ 
    public double distance(int startx, int starty)
    {
	return Math.sqrt(( getX() - startx ) * ( getX() - startx ) +
			 ( getY() - starty ) * ( getY() - starty ));
    }

    /** random turtle turn 
     *  @param left:  left border of sector for random turns
     *  @param right: right border of sector for random turns
     */
    public void randomturn(double left, double right)
    {
		double angle = ((right + left) * dice.nextDouble() - left);
       super.rt(angle);
    }
	
	

    /**  move the turtle forward after a random turn
     *  @param left:  turtle turns to left side random max. degrees 
     *  @param right: turtle turns to right side random max. degrees 
     *  @param length: lenght of turtle step
     */
    public void randomstep(double left, double right, double length)
    {
		s = 0;
       randomturn(left, right);
       fd(50 * dice.nextDouble() );
	   s++;
    }
	
	public int gets()
	{
	return s;
	}
	
	public void resets()
	{
	s = 0;
	}
}


und hier soll es ausgegeben werde (hauptprogramm):
Code:
 Std.out.println("sooft wurde die methode durchlaufen " + t.gets() );

ich hoffe jemand hat einen tipp, glaube nämlich der ansatz geht in die richtige richtung.... :bahnhof:
danke schonmal im vorraus!
 
danke für die schnellen antworten, leider gibt er weiterhin "0" aus... ???:L
 
ja, im hauptprogramm, aber als letztes:
Code:
 Std.out.println("Eine integer variable aus RandomTurtle: " + t.gets() );
	   Std.out.println("durchlaufener winkel:" + t.getTotalAngle() ); 
	   Std.out.println("zurückgelegter weg:" + t.getTotalPath() );   
	   t.resetAngle();
	   t.resetPath();
	   t.resets();
 
hm, komisch...

hier nochmal die klasse:
Code:
public class RandomTurtle extends PathTurnTurtle
{   
    // attention: an own class PathTurnTurtle (an extension of
    // class TurnTurtle must exist (see TA 3.1) !! 
    // instance of class Random
    Random dice = new Random();
	int s;
    /** constructor
     *  @param screen: screen of the turtle
     */
    public RandomTurtle(TurtleScreen screen)
    {
	super(screen);
    }
    
    /** distance between turtle and starting point 
     *  @param startx:  x coordinate of starting point
     *  @param starty:  y coordinate of starting point
     *  @return: compute the distance between turtle and 
     *  starting point; return the value
     */ 
    public double distance(int startx, int starty)
    {
	return Math.sqrt(( getX() - startx ) * ( getX() - startx ) +
			 ( getY() - starty ) * ( getY() - starty ));
    }

    /** random turtle turn 
     *  @param left:  left border of sector for random turns
     *  @param right: right border of sector for random turns
     */
    public void randomturn(double left, double right)
    {
		double angle = ((right + left) * dice.nextDouble() - left);
       super.rt(angle);
    }
	
	

    /**  move the turtle forward after a random turn
     *  @param left:  turtle turns to left side random max. degrees 
     *  @param right: turtle turns to right side random max. degrees 
     *  @param length: lenght of turtle step
     */
    public void randomstep(double left, double right, double length)
    {
       randomturn(left, right);
       fd(50 * dice.nextDouble() );
	   s++;
    }
	
	public int gets()
	{
	return s;
	}
	
	public void resets()
	{
	s = 0;
	}
}


und hier das hauptprogramm:
Code:
public class Example33parameter
{
   static final int FOOD_X   = 300;  // x coordinate: food
   static final int FOOD_Y   = 275;  // y coordinate: food
   static final int START_X  = 400;  // x coordinate: turtle start
   static final int START_Y  = 400;  // y coordinate: turtle start
   static final int LEFT     = 180;  // left border of sector for 
                                     // random turtle turns
   static final int RIGHT    = 180;  // right border of sector for 
                                     // random turtle turns
   static final int LENGTH   = 20;   // length of turtle step
   static final int FOODAREA = 1;    // zone of capture

   /** mark the food coordinates (the SmellTurtle draws a red cross)  
    *  @param x: x coordiante of food
    *  @param y: y coordinate of food
    */
   public static void markFoodpos(double x, double y, SmellTurtle t)
   {
      t.setpc(Color.red);
      t.setPosition(x,y);
      t.pd(); t.fd(5); t.bk(10); t.fd(5);
      t.rt(90); t.fd(5); t.bk(10); t.pu();
   }

   /** the SmellTurtle searches the food
    *  @return: returns true if food is found
    */
   public static boolean smellwalk(SmellTurtle t)
   {

      double dist = 0;
      t.pd();
      do 
      {
         dist = t.smellStep(FOOD_X, FOOD_Y, LEFT, RIGHT, LENGTH, dist);
		       }
      while ( dist > FOODAREA );
      return true;
   }

   public static void main(String[] args)
   {
   
      TurtleScreen ts = new TurtleScreen(50,50,600,600);
      SmellTurtle  t  = new SmellTurtle( ts );
	  
	  Std.out.println("weg:" + t.getTotalPath() );  
	  Std.out.println("winkel:" + t.getTotalAngle() );  
      markFoodpos(FOOD_X,FOOD_Y,t);
      t.setpc(Color.blue);
      t.setPosition(START_X,START_Y);
      if ( smellwalk(t) ) Std.out.println("the food is found");
	  Std.out.println("Eine integer variable aus RandomTurtle: " + t.gets() );
	  Std.out.println("Zahl der Schritte: " + t.getTotalPath()/25 );
	   Std.out.println("durchlaufener winkel:" + t.getTotalAngle() ); 
	   Std.out.println("zurückgelegter weg:" + t.getTotalPath() );   
	   t.resetAngle();
	   t.resetPath();
	   t.resets();
   }
}

wenn der fehler auch hier nicht ersichtlich ist, hat jemand vielleicht eine andere idee?
ziel ist es die "schritte" der turtle auszugeben...
vielen dank!
 
stimmt!
smell turtle ist eine weitere klasse. soll ich für die randomturtle klasse dann auch eine variable bestimmen, oder muss ich eine methode au smell turtle nehmen und die zählen...?
 
randomturtle ist die klasse, die beschreibt wie sich die turtle (zufällig) bewegt. vielleicht mal konkreter, was muss ich eingeben um auf gets() aus randomturtle zugreifen zu können, im hauptprogramm?
vielen dank für die schnelle hilfe
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben