1. 阅读以下说明和Java程序,填充程序中的空缺。
[说明]
下面的程序用来计算并寻找平面坐标系中给定点中最近的点对(若存在多对,则输出其中的一对即可。程序运行时,先输入点的个数和一组互异的点的坐标,通过计算每对点之间的距离,从而确定出距离最近的点对。例如,在图中所示的8个点中,点(1,1)与(2,0.5)是间距最近的点对。

【Java代码】
import java.util.Scanner;
class GPoint
{
private double x,y;
public void setX(aouble x){this.x=x;}
public void setY(double Y){this.y=y;}
public double getX() {return this.x;)
public double getY() {return this.y;
}
class FindNearestPotnts{
public static void main(String[]args){
Scanner input=new Scanner(System.in);
System.out.print("输入点的个数:");
int numberOfPoints=input.nextlnt();
______ points=new GPoint[numberOfPoints];//创建保存点坐标的数组
System.out.print("请输入"+numberOfPoints+"个点的坐标");
for(int i=0;i<points.length;i++){
points[i]=______;
points[i].setX(input.nextDouble());
points[i].setY(input.nextDouble());
}
FindNearestPoints fop=new FindNearestPoints();
int p1=0,p2=1;//p1和p2用于表示距离最近的点对在数组中的下标
double shortestDistance=fnp.getDistance(points[p1],points[p2]);
//计算每一对点之间的距离
for(int i=0;i<points.length;i++)
{
for(intj=i+1;j<______;j++)
{
double tmpDistance=fnp.______;//计算两点间的距离
if(______)
{
p1=i;
p2=j;
shortestDistance=tmpDistance;
}
}
}
System.out.pdntln("距离最近的点对是("+
points[p1].getX()+","+points[p1].getY()+")和("+
points[p2].getX()+","+points[p2].getY()+")");
}
public double getDistance(GPoint pt1,GPoint pt2)
{
retum Math.sqrt((pt2.getX()-pt1.getX())
*(pt2.getX()-pt1.getX())
+(pt2.getY()-pt1.getY())
*(pt2.getY()-pt1.getY());
}
}
GPoint
(2)new GPoint()
(3)points.length
(4)getDistance(points[i],points[j])
(5)shortestDistance>tmpDistance
[解析] 本题是用Java来实现题目要求的功能。根据程序注释,我们不难看出第一空是要定义一个创建保存点坐标的数组,调用的是Gpoint构造函数,那么其对象类型为Gpoint,因此第一空的答案为“GPoint”。第二空是要给数组中定义具体的每个点对象,那么应该用“new GPoint()”。
第3、4、5空都在双重for循环中,根据题目意思,该双重for循环是要实现计算每一对点之间的距离。其中第3空是循环的条件,循环继续的条件是j小于点的个数,因此第3空填“points.length”。而第4空很明显是要计算两点间距离,结合程序,我们不难看出,调用fnp的函数getDistance即可,而这里是要求点i和点j间的距离,因此第4空答案应填“getDistance(points[i],points[j])”。第5空是if语句的条件,如果条件成立,则p1=i,p2=j,说明i和j点间的距离比当前最短距离更短,因此第5空是“shortestDistance>tmpDistance”。