0

ロボットの機能を模倣するコードを作成することでした。回したり動かしたりなど。まるで間違った方法でこれに取り組んでいるかのように感じます... これを書いているとき、私はそれの要点を理解したと思いました.コンストラクターの方向がこれである場合、新しい方向はこれです. 私はこれをテストしましたが、もちろん、実際には正しくない結果が得られました。オブジェクトにこれらの関数を実際に使用していないことは間違いありません。この種のコードの操作方法に関するヒントを得ることができますか?

import java.awt.Point;
public class Robot
{
private int x;
private int y;
private int d;
private int p;
public static final int NORTH = 0;
public static final int SOUTH = 1;
public static final int EAST = 2;
public static final int WEST = 3;

/**
 * Constructor for objects of class Robot
 * @param theX the x coordinate
 * @param theY the y coordinate
 * @param theDirection the direction the robot is facing
 */
public Robot(int theX, int theY, int theDirection)
{
    x = theX;
    y = theY;
    d = theDirection;
}

public void turnLeft()
{
    if(d == NORTH) {
        d = WEST;
    }
    if(d == WEST) {
        d = SOUTH;
    }
    if(d == SOUTH) {
        d = EAST;
    }
    if(d == EAST) {
        d = NORTH;
    }
}



public String getDirection()
{
    if(d == NORTH) {
        return "N";
    }
    if(d == SOUTH) {
        return "S";
    }
    if(d == WEST) {
        return "W";
    }
    if(d == EAST) {
        return "E";
    }   
    return "";
}
}

テスト

Robot rob = new Robot(20, 20, Robot.SOUTH);
rob.turnLeft;
System.out.println(rob.getDirection);

これは、実際には E を返すべきだと思うときに S を返します。

4

6 に答える 6

1

他に必要な場合は。左に曲がると、次の if ステートメントの条件に一致する新しい値を d に割り当てます。

于 2013-04-29T08:04:05.987 に答える
1

あなたのturnLeft方法はまったく正しくありません。
を使用したコードは次のifとおりです。

public void turnLeft() {
  if (d == NORTH) {
      d = WEST;
  } else if (d == WEST) {
      d = SOUTH;
  } else if (d == SOUTH) {
      d = EAST;
  } else if (d == EAST) {
      d = NORTH;
  }
}

を使用したコードは次のとおりですswitch..case

public void turnLeft() {

  switch (d) {
    case NORTH: d = WEST; break;
    case WEST: d = SOUTH; break;
    case SOUTH: d = EAST; break;
    case EAST: d = NORTH; break;
  }
}
于 2013-04-29T08:06:18.853 に答える
1

列挙型

public enum Direction {
    private String name;
    private String indicator;

    public Direction(String name, String indicator) {
        this.name = name;
        this.indicator= indicator;
    }

    // getters

    NORTH("North", "N"),
    EAST("East", "E"),
    SOUTH("South", "S"),
    WEST("West", "W");
}

次に、これを簡単に実行できます。

turnLeft() {
   switch (d) {
        case Direction.NORTH: return Direction.WEST;
        case Direction.WEST:  return Direction.SOUTH;
        case Direction.SOUTH: return Direction.EAST;
        case Direction.EAST:  return Direction.NORTH;
    }
}

getDirection() {
    return d.getIndicator();
}

NORTHこのようにして、4 つの static int ( 、WESTEASTSOUTH) を取り除き、 に変更できint dますDirection d。これには を使用することを強くお勧めしenumます。タイプセーフにするだけです。

于 2013-04-29T08:12:19.247 に答える
0

1st) p と d のものを本当にクリーンアップする必要があります ;) d を「方向」と呼ぶことをお勧めします

2番目) 方向の int 定数を時計回りに再配置する必要があります。turnLeft()そのため、メソッドを 1 行のコードに減らすことができます。次のように注文できます。

public static final int NORTH = 0;
public static final int EAST = 1;
public static final int SOUTH = 2;
public static final int WEST = 3;

3番目) テストには JUnit を使用する必要があります。

@Test
public void turnLeft() {
    Robot rob = new Robot(20, 20, Robot.SOUTH);
    rob.turnLeft;
    assertEquals("E", rob.getDirection);
    rob.turnLeft;
    assertEquals("N", rob.getDirection);
    rob.turnLeft;
    assertEquals("W", rob.getDirection);
    rob.turnLeft;
    assertEquals("S", rob.getDirection);
}
于 2013-04-29T08:06:38.497 に答える