Basically this was a homework that I had to do about rectangles. The problem came when I needed to do simple math to calculate the x and y values of the vertices e.g. (x-width/2), and because i needed to use those values in more than one method, i created new variables in the class for that simple math (x1 = (x-width/2), x2, y1, y2 etc), for readability. For some reason, in my methods, using the variables produced wrong results. when I went back and replaced them with the math again, it worked.
My question is why are the variables i made (under //WEIRD VARIABLES) not working inside the contains method?
here is my code:
package com.example;
public class MyRectangle2D {
    double x,y;
    double width, height;
    //a couple of getters and setters
    //constructor
    MyRectangle2D(){
        x=0.0;
        y=0.0;
        width=1.0;
        height=1.0;
    }
    MyRectangle2D(double X, double Y, double Width, double Height){
        x=X;
        y=Y;
        width=Width;
        height=Height;
    }
    // WEIRD VARIABLES
    private double x1 = x-(width/2);
    private double x2 = (x+(width/2));
    private double y1 = (y-(height/2));
    private double y2 = (y+(height/2));
    //methods
    boolean contains(double X, double Y){
        /* initially wrote: 
           return (!( X<x1 || X>x2 || Y <y1 || Y>y2 )); 
           didnt work, bc for some reason x1,x2,y1,y2 were all 0.0
           the below works well: */
        return (!(X<(x-(width/2)) || X>(x+(width/2)) || Y <(y-(height/2)) || Y>(y+(height/2))));
    }
    public static void main(String[] args) {
        MyRectangle2D b = new MyRectangle2D(1, 2, 3, 4);
        System.out.println(b.x1); // 0.0 (should be -0.5)
        System.out.println(b.x); // 1.0 (correct)
        System.out.println(b. width); // 3.0 (correct)
        System.out.println("(1.0,2.0) in b? (true?) " + b.contains(1.0,2.0)); //true (correct)
    }
}
I'm perfectly fine just writing the math out again and again, but in my homework they wanted me to create a method to check if this rectangle contains another rectangle, like
    boolean contains(MyRectangle2D r){}
which means i need to write r.(x-(width/2)) <= (x-(width/2)) etc. to write my conditions, which seems tedious and messy. It seemed logical to me to create those x1,x2,y1,y2 variables as a form of shortcut, since the math were the same formula and it would be cleaner and I could directly use r.x1 instead of r.(x-(width/2))
tl;dr: when i println x1, it gives me 0.0, but when i println x-(width/2), it gives me -0.5, which is correct.
i've been trying to figure out why the math goes wrong but i'm still lost. any help would be much appreciated!
 
     
    