检查一个点是否在指定的Rectangle内

mas*_*amr 8 java geometry

好的,所以我正在为Java类做一个赋值,并且赋值的一部分是找出一个点是否在矩形的维度内.所以我创建了这段代码:

    public boolean contains(Point p){
        return (this.getLocation().getX() < p.getX() && this.getLocation().getY() < p.getY() &&
                this.getLocation().getX() + this.getWidth() > p.getX()  &&
                this.getLocation().getY() + this.getHeight() > p.getY());
    }
Run Code Online (Sandbox Code Playgroud)

我也创建了一个点类,这就是我要求"Point p"参数的原因.为了测试这个布尔值,我在Main类中创建了一个简单的'if'语句:

//check if one rectangle's point is inside another
                if (rectangle.contains(rectangle2.getLocation()))
                    System.out.println("the point is in the rectangle");
Run Code Online (Sandbox Code Playgroud)

该点的位置是(6,7).矩形1的点,宽度和高度分别为(4,5),9和3.我知道这一点是在第一个矩形内部,但println语句没有显示,这意味着我创建的布尔值必定存在问题,但我没有看到错误,也许我的头是阴天但是可能有人指出我这里有什么问题?

PS这是所有控制台工作,我不处理一些GUI或图形编程.

Mar*_*gus 9

AWT Rectangle已经有了contains方法.(链接)

如果您了解命名空间如何冲突,任务似乎即将发生.例如,如果你是懒惰的(这是程序员最钦佩的品质之一),那么你可以写:

public static class Rectangle {
    java.awt.Rectangle _r;

    public Rectangle(int x, int y) {
        this._r = new java.awt.Rectangle(x, y);
    }
    public boolean contains(Point p) {
        return this._r.contains(p);
    }
}
Run Code Online (Sandbox Code Playgroud)

您通常不希望重新实现功能,也不希望扩展类.


Pau*_*l Z 4

我看起来还不错。我会检查您的测试用例是否确实具有您认为的数字;我还会检查您的访问器是否都返回正确的值(我无法告诉您我将 getX() 实现为 {return this.y;} 的次数)。除此之外,这是任何人的猜测。

  • @mastrgamr,这就是遵循主要规则之一的原因 - **您应该使用显示其用法的名称来命名您的字段和方法**,所以,请尝试使用“int width”代替“int x” (2认同)