Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I use the == operator to compare Point objects in Java?

While i am solving the questions from the book "cracking the coding interview"... i got a doubt.the question is:

Given two squares on a two dimensional plane, find a line that would cut these two squares in half.

Solution:Any line that goes through the center of a rectangle must cut it in half. Therefore, if you drew a line connecting the centers of the two squares, it would cut both in half.

   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);
              }
       }
}

But now the doubt is '==' operator in cut method to check whether they are points of same square. Is Point immutable?? kindly help me... Thanks in advance.

like image 579
hareendra reddy Avatar asked Apr 10 '26 04:04

hareendra reddy


1 Answers

It doesn't matter if Point is immutable. What matters is that the == is doing a pointer/reference comparison. It is checking to see if middle_s and middle_t reference the same Object instance, not whether or not they are the same in terms of their internal fields.

What you probably want to do is implement/override equals() for the Point class such that it compares the x and y coordinates, and returns true if they match. Then you can compare your points by doing if (middle_s.equals(middle_t)).

When you override equals(), be sure you also override hashCode() accordingly, as well.

like image 148
aroth Avatar answered Apr 11 '26 19:04

aroth



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!