欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

邮局问题(Java,输入输出文件)

程序员文章站 2021-12-23 21:07:48
...
import java.io.*;
import java.util.Scanner;
public class postoffice {
	int result;//计算的结果
	int x[];//居民点的X坐标
	int y[];//居民点的Y坐标
	int n;//居民点的个数n
	public static void main(String[] args) {
		postoffice po = new postoffice();//程序入口函数,创建类的对象并调用方法
		po.iostream();
	}
	public  void iostream(){
		try {
			FileWriter fw = new FileWriter("output.txt");//输出的数据文件
			for(int m=0;m<5;m++){//依次读取5个数据文件
			Scanner in = new Scanner(new BufferedInputStream(new FileInputStream("input_assign01_0"+ m +".dat")));//输入的数据文件
			n = in.nextInt();//读取数据文件中居民点的个数
			x=new int[n];
			y=new int[n];
			for(int i=0;i<n;i++)
			{
				x[i]=in.nextInt();//读取居民点的X坐标
				y[i]=in.nextInt();//读取居民点的Y坐标
			}
			sort(x,n);//调用排序算法,将X坐标点从小到大进行排序
			sort(y,n);//调用排序算法,将Y坐标点从小到大进行排序
			result = sum(x,n)+sum(y,n);//调用距离求和算法,得到最佳点的邮局与所有居民点距离之和
			fw.write(result+" ");//将结果输出到文件中
			fw.write("\r\n");
			fw.flush();
			System.out.println("第"+ m + "个文件数据的结果:" + result);//将结果输出到屏幕
			 
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void sort(int a[],int n){//排序算法,将X/Y坐标点从小到大进行排序,为了取得坐标点的中位数
		int i,j,temp;
		for(i=0;i<n;i++){
			for(j=i+1;j<n;j++)
			if(a[i]>a[j]){
				temp=a[i];
				a[i]=a[j];
				a[j]=temp;
			}
		}
	}
	
	public int sum(int a[],int n){//求和算法,计算中位数坐标值与其他坐标值距离之和
		int s=0,i;
		for(i=0;i<n;i++){
			if(a[i]>a[n/2])
			     s+=a[i]-a[n/2];
			else s+=a[n/2]-a[i];
		}
		return s;
	}

}
相关标签: 算法