平均距离

package com;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.text.DecimalFormat;
import java.util.ArrayList;

//已知平面上若干个点的坐标。
//需要求出在所有的组合中,4个点间平均距离的最小值(四舍五入,保留2位小数)。
//比如有4个点:a,b,c,d,则平均距离是指:ab, ac, ad, bc, bd, cd 这6个距离的平均值。
//每个点的坐标表示为:横坐标,纵坐标
//坐标的取值范围是:1~1000
//所有点的坐标记录在in.txt中,请读入该文件,然后计算。
//注意:我们测试您的程序的时候,in.txt 可能会很大,比如包含上万条记录。
//举例:
//如果,in.txt 内的值为:
//10,10
//20,20
//80,50
//10,20
//20,10
//则程序应该输出:
//11.38
public class MyPoint {

private double x;
private double y ;
public MyPoint(){}
public MyPoint(double x,double y){//传过来的是两个点
this.x = x;
this.y = y;
}
public static double getDistance(MyPoint p1,MyPoint p2){
double dx = p1.x - p2.x;
double dy = p1.y - p2.y;
return Math.sqrt(dx*dx+dy*dy);
}

public static void main(String[] args){
ArrayList<String> list = bufferedReader();
zuhe(list);
}

//求所有点的组合
public static void zuhe(ArrayList<String> list){
double sum = 0;
double show = 0;
for(int i=0;i<list.size();i++){
for(int j=i+1;j<list.size();j++){
//得到每一种组合:求出每一组合的距离

double x1 = Double.valueOf(list.get(i).split(",")[0]);
double y1 = Double.valueOf(list.get(i).split(",")[1]);

double x2 = Double.valueOf(list.get(j).split(",")[0]);
double y2 = Double.valueOf(list.get(j).split(",")[1]);

MyPoint p1 = new MyPoint(x1,y1);
MyPoint p2 = new MyPoint(x2,y2);
double temp = MyPoint.getDistance(p1, p2);
show++;
sum+=temp;
System.out.println("点:("+x1+","+y1+")"+"的和点:("+x2+","+y2+")的距离为:"+temp);
}
}
DecimalFormat df = new DecimalFormat("#0.00");

System.out.println(df.format(sum/show));
}

//获取文件中的数据 点的个数
public static ArrayList<String> bufferedReader(){
File f = new File("src/com/in.txt");
ArrayList<String> list = new ArrayList<String>();
try{
BufferedReader br = new BufferedReader(new FileReader(f));
while(br.ready()){
list.add(br.readLine());
}
br.close();
}
catch(Exception ex){
ex.printStackTrace();
}
return list;
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值