3

「コーディングインタビューを割る」という本からの質問を解決しているときに...疑問が生じました.質問は次のとおりです。

2 次元平面上に 2 つの正方形がある場合、これら 2 つの正方形を半分に切る線を見つけます。

解決策: 長方形の中心を通る線は、長方形を半分に切断する必要があります。したがって、2 つの正方形の中心を結ぶ線を引くと、両方が半分になります。

   public class Square {
       public double left;
       public double top;
       public double bottom;
       public double right;
       public Square(double left, double top, double size) {
              this.left = left;
              this.top = top;
              this.bottom = top + size;
              this.right = left + size;
       }

       public Point middle() {
              return new Point((this.left + this.right) / 2,
                                           (this.top + this.bottom) / 2);
       }

       public Line cut(Square other) {
              Point middle_s = this.middle();
              Point middle_t = other.middle();
              if (middle_s == middle_t) {
                     return new Line(new Point(left, top),
                     new Point(right, bottom));
              } else {
                     return new Line(middle_s, middle_t);
              }
       }
}

しかし今疑問なのは、cut メソッドの '==' 演算子で、それらが同じ正方形の点であるかどうかを確認することです。ポイントは不変ですか?? 親切に助けてください...よろしくお願いします。

4

3 に答える 3

9

Point不変かどうかは問題ではありません。重要なのは==、ポインター/参照の比較を行っていることです。内部フィールドに関して同じであるかどうかではなく、同じ Object インスタンスmiddle_sを参照しているかどうかを確認しています。middle_t

おそらくやりたいことは、との座標を比較し、一致する場合は true を返すようにクラスを実装/オーバーライドequals()することです。次に、 を実行してポイントを比較できます。Pointxyif (middle_s.equals(middle_t))

をオーバーライドするときはequals()、それに応じてオーバーライドすることも忘れないでくださいhashCode()

于 2011-07-31T00:49:37.173 に答える
2

Point が不変であるかどうかは問題ではありません...本当の問題はまだ残っています。

重要なのは、ポイント オブジェクトのアイデンティティを気にするかどうか (それらが同じインスタンスであるかどうか)、またはポイント オブジェクトのを気にするかどうかです。

ここでは明らかに、どのオブジェクト インスタンスであるかではなく、ポイントの値に関心があるため、 を使用する必要がありますmiddle_s.equals(middle_t)

于 2011-07-31T01:06:07.997 に答える
0

JavaDocsから、メソッドを使用して 2 つのオブジェクト equalsを比較できます。さらに、詳細な説明については、 Android 開発者のページを見てみましょう。Point

このインスタンスと指定されたオブジェクトを比較し、それらが等しいかどうかを示します。等しいためには、o は、クラス固有の比較を使用して、このインスタンスと同じオブジェクトを表す必要があります。一般的な契約では、この比較は再帰的、対称的、および推移的でなければなりません。また、null 以外のオブジェクト参照は null と等しくありません

于 2014-04-04T16:28:55.737 に答える