java问题描述:已知平面上有若干个点,求距离最近的两个点。 要求用面向对象的思想解决问题,即平面上的点用一个Point 类来描述,该类包含x和y两个double型私有属性,一个无参的构造方法和一个包含x、y参数的构造方法,以及x和y取值(getter)和赋值(setter)的普通方法。
时间: 2024-02-09 17:09:44 浏览: 27
好的,对于这个问题,我会用面向对象的思想来解决。以下是我的解决方案:
首先,我们需要一个Point类来描述平面上的点。这个类包含x和y两个double型私有属性,一个无参的构造方法和一个包含x、y参数的构造方法,以及x和y取值(getter)和赋值(setter)的普通方法。这个类的代码如下:
```java
public class Point {
private double x;
private double y;
public Point() {
this.x = 0.0;
this.y = 0.0;
}
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
public void setX(double x) {
this.x = x;
}
public void setY(double y) {
this.y = y;
}
}
```
接下来,我们需要一个类来处理这些点,找出距离最近的两个点。我们可以叫这个类为PointProcessor。这个类包含一个私有的Point数组points,表示平面上的所有点,以及一个方法findClosestPoints(),该方法返回距离最近的两个点。这个类的代码如下:
```java
public class PointProcessor {
private Point[] points;
public PointProcessor(Point[] points) {
this.points = points;
}
public Point[] findClosestPoints() {
Point[] closestPoints = new Point[2];
double minDistance = Double.MAX_VALUE;
for (int i = 0; i < points.length; i++) {
for (int j = i + 1; j < points.length; j++) {
double distance = getDistance(points[i], points[j]);
if (distance < minDistance) {
minDistance = distance;
closestPoints[0] = points[i];
closestPoints[1] = points[j];
}
}
}
return closestPoints;
}
private double getDistance(Point p1, Point p2) {
double dx = p1.getX() - p2.getX();
double dy = p1.getY() - p2.getY();
return Math.sqrt(dx*dx + dy*dy);
}
}
```
在findClosestPoints()方法中,我们使用两个嵌套的for循环来遍历所有点的组合,计算它们之间的距离,并找出距离最近的两个点。这个方法返回一个包含这两个点的Point数组。
现在,我们可以使用这个类来解决我们的问题:
```java
public class Main {
public static void main(String[] args) {
Point[] points = new Point[4];
points[0] = new Point(0.0, 0.0);
points[1] = new Point(1.0, 1.0);
points[2] = new Point(2.0, 2.0);
points[3] = new Point(3.0, 3.0);
PointProcessor processor = new PointProcessor(points);
Point[] closestPoints = processor.findClosestPoints();
System.out.println("Closest points: (" + closestPoints[0].getX() + ", " + closestPoints[0].getY() + ") and (" + closestPoints[1].getX() + ", " + closestPoints[1].getY() + ")");
}
}
```
这个程序将输出:Closest points: (0.0, 0.0) and (1.0, 1.0)。这是因为这两个点之间的距离最近。