我的错误是什么?我该如何解决?

时间:2014-04-21 15:03:27

标签: java gridworld

更新:我需要回答的是底部的问题。

这是SpiralBug的特殊类型,所以我在互联网上没有看到任何这样的例子。这个SpiralBug使用了SpiralBug代码,但它有额外的内容,一旦它到达BoundedGrid的边界并且无法继续向前移动它必须再次在网格中心重新启动,这是我的问题开始的地方。这是我的代码没有错误。

我的SpiralBugRunner代码

    import info.gridworld.actor.ActorWorld; 
    import info.gridworld.grid.Location; 
    import java.awt.Color; 

    public class SpiralBugRunner 
     { 
      public static void main( String args[] ) 
      { 
      ActorWorld world = new ActorWorld( ); 
      SpiralBug bug1 = new SpiralBug(0);

      world.add (new Location(4, 4), bug1 );

      world.show( ); 
      } 
     }

和SpiralBug

import info.gridworld.actor.Bug;
import info.gridworld.actor.Actor;
import info.gridworld.grid.Location;

public class SpiralBug extends Bug 
 { 
  private int sideLength; 
  private int steps; 

  public SpiralBug(int n) 
  { 
    sideLength = n; 
    steps = 0; 
  }

  public void act() 
  { 
   if (steps < sideLength && canMove()) 
   { 
    move(); 
    steps++; 
   } 
    else 
   { 
    turn(); 
    turn(); 
    steps = 0; 
    sideLength++; 
   }  
  }

 public void moveTo(Location newLocation)
  {
   Location loc = new Location(getGrid().getNumCols(), getGrid().getNumRows());
   moveTo(loc);
   sideLength = 0;
  }
 }  

我真正的问题是如何设置将错误重置到中间以便在无法移动后再次运行?

1 个答案:

答案 0 :(得分:3)

您在自身内部调用此方法,导致StackOverflow错误。

public void moveTo(Location newLocation)
{
    Location loc = new Location(getGrid().getNumCols(), getGrid().getNumRows());
    moveTo(loc);
    sideLength = 0;
}

这是错误的方法。这应该是move()方法。 moveTo方法占用一个位置并移动到该位置。这不应该被覆盖。

将其更改为:

public void move(Location newLocation)
{
    Location loc = new Location(getGrid().getNumCols(), getGrid().getNumRows());
    moveTo(loc);
    sideLength = 0;
}