LifeTimeException@hrk623

This is my breakpoints and stack-trace for my life

暇だったのでソニーの例題やってみた。

f:id:hrk623:20111229050516j:plain
http://www.sony.co.jp/SonyInfo/Jobs/newgrads/sus/go_for_it.htmlより。

public class Cube {
  private class Coordinate{
    private int x, y, z;
    public Coordinate(int x, int y, int z){
      this.x = x;
      this.y = y;
      this.z = z;
    }
    public int x() { return x; }
    public int y() { return y; }
    public int z() { return z; }
  } // private class Coordinate
	
  private Coordinate leftBottomFront, rightTopBack;

  public Cube(int x, int y, int z, int width, int height, int depth){
    leftBottomFront = new Coordinate(x, y, z);
    rightTopBack = new Coordinate(x+width, y+height, z+depth);
  }
		
  public boolean intersects(Cube other){
    if(this.left() > other.right() || other.left() > this.right()
      || this.bottom() > other.top() || other.bottom() > this.top())
      || this.front() > other.back() || other.front() > this.back())
        return false;
    return true;
  }

  public int left(){ return this.leftBottomFront.x(); }
  public int right(){ return this.rightTopBack.x(); }
  public int top(){ return this.rightTopBack.y(); }
  public int bottom(){ return this.leftBottomFront.y(); }
  public int front(){ return this.leftBottomFront.z(); }
  public int back(){ return this.rightTopBack.z(); }
} // public class Cube

Coordinateクラス

  • private classとして3次元のCoordinateを定義。
  • とりあえず今はいらないのでセッターは作らず、ゲッターのみを設置。
  • わざわざCoordinateを作るのはInformation hidingとFlexibilityのため。
  • 後々Triangleとか作るなら、そのまま外に出してreuse出来るしね。
  • ゲッターは慣例に従ってgetXのようにgetから始めるべきだが、ここでは可読性を重視。

Cubeクラス

  • なんでCubeかって?それしか思いつかなかった。
  • Cubeは2つの座標から定義される。
    • 手前左下の座標
    • 奥右上の座標

intersectメソッド

  • 重なり判定用メソッド
  • 重なればtrueを返すのではなく、重ならなければfalseを返す方がスッキリだね。


テストケース・・・だと・・・?