-5

次のメソッドを Point クラスに追加します。

public int manhattanDistance(Point other)

現在の Point オブジェクトと指定された他の Point オブジェクトの間の「マンハッタン距離」を返します。マンハッタン距離は、マンハッタンの通りを運転しているかのように、2 つの場所の間を水平または垂直に移動するだけで移動できる場合の距離を指します。この場合、マンハッタン距離は座標の差の絶対値の合計です。言い換えれば、差とxポイント y間の差です。

public class Point {
 private int x;
 private int y;

 // constructs a new point at the origin, (0, 0)
 public Point() {
 this(0, 0); // calls Point(int, int) constructor
 }

 // constructs a new point with the given (x, y) location
 public Point(int x, int y) {
 setLocation(x, y);
 }

 // returns the distance between this Point and (0, 0)
 public double distanceFromOrigin() {
 return Math.sqrt(x * x + y * y);
 }

 // returns the x-coordinate of this point
 public int getX() {
 return x;
 }

 // returns the y-coordinate of this point
 public int getY() {
 return y;
 }

 // sets this point's (x, y) location to the given values
 public void setLocation(int x, int y) {
 this.x = x;
 this.y = y;
 }

 // returns a String representation of this point
 public String toString() {
 return "(" + x + ", " + y + ")";
 }

 // shifts this point's location by the given amount
 public void translate(int dx, int dy) {
 setLocation(x + dx, y + dy);
 }

 public int manhattanDistance(Point other){
/// int distance = Math.abs(x-other) + Math.abs(y-other);

 return Math.abs(x - other)+ Math.abs(y - other) ;
 }
 }
4

3 に答える 3

2

other.getX()の代わりにother、y についても同じです。Other は Point クラスのインスタンスです。この値のゲッターである getX を介して、other の x 値にアクセスします。これを読む:

http://docs.oracle.com/javase/tutorial/java/concepts/index.html

于 2013-01-23T13:43:19.057 に答える
1
return Math.abs(x - other)+ Math.abs(y - other);

上記の行は次のようになります。

return Math.abs(x - other.getX())+ Math.abs(y - other.getY());

なんで?

現時点では、ポイントオブジェクトを整数から直接取得しようとしているため、意味がありません。論理的に見ても、整数から 2D 空間のポイントを賢明に減算することはできません。整数から特定の値を取得する必要があります (otherオブジェクトの x と y は、適切なメソッドを呼び出して取得します)。

問題とは関係ありませんが、コードを適切にフォーマットすることもお勧めします!

于 2013-01-23T13:45:26.513 に答える
0

この行は間違っています: Math.abs(x - other)+ Math.abs(y - other)

他は Point オブジェクトです。その Point オブジェクトの x と y を取得してから、マイナス演算を行う必要があります。

代わりにこれを試してください: return Math.abs(x - other.getX())+ Math.abs(y - othe.getY()) ;

于 2013-01-23T13:44:28.520 に答える