Java实现两点距离计算、Circle类contains与overlaps方法求助
修正方案
- 首先修正
Point类的distance方法,两点距离公式为√[(x₁-x₂)² + (y₁-y₂)²],你当前的实现没有计算当前点和传入点的坐标差,逻辑错误。 - 修正不符合规范的setter方法,setter需要接收参数修改对应属性值,你原代码的setter逻辑和getter完全重复。
- 实现
Circle.contains():判断目标点到圆心的距离 ≤ 圆半径即可。 - 实现
Circle.overlaps():判断两个圆心的距离 ≤ 两个圆半径之和即可。 - 补充原代码缺失的大括号,将内部类改为静态类适配静态main方法的调用要求。
public class Question03 { public static void main(String[] args) { Circle c1 = new Circle(new Point(0, 0), 1.0); System.out.println(c1.getArea()); Circle c2 = new Circle(new Point(1, 0), 1.0); System.out.println(c2.getArea()); System.out.println(c1.getCenter().distance(c2.getCenter())); System.out.println(c1.contains(new Point(0, 0.5))); System.out.println(c1.overlaps(c2)); Circle c3 = new Circle(new Point(0, 4), 1.0); System.out.println(c3.contains(new Point(0, 0))); System.out.println(c3.overlaps(c1)); } static class Circle { Point center; double radius; Circle(Point center, double radius) { this.center = center; this.radius = radius; } public Point getCenter() { return this.center; } public double getRadius() { return this.radius; } public void setCenter(Point center) { this.center = center; } public void setRadius(double radius) { this.radius = radius; } public double getArea() { return Math.PI * radius * radius; } public double getPerimeter() { return Math.PI * (radius * 2); } public boolean contains(Point p) { return center.distance(p) <= radius; } public boolean overlaps(Circle c) { double centerDistance = this.center.distance(c.getCenter()); return centerDistance <= this.radius + c.getRadius(); } } static class Point { double x; double y; Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return this.x; } public double getY() { return this.y; } public void setX(double x) { this.x = x; } public void setY(double y) { this.y = y; } public double distance(Point p) { double dx = this.x - p.getX(); double dy = this.y - p.getY(); return Math.sqrt(dx * dx + dy * dy); } } }
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

