一:说明
(1)使用floyd实现各个站点的计算记录和路径
(2)站点获取和初始距离根据外部文件得到
(3)结果以外部文件的形式存储
(4)站点间转乘,认为初始值也为1
(5)代码注释比较详细,如有疑问或者代码有,请联系我,谢谢
(6)java中二维数据的定义:
? ? a:? float[][] numthree;? ? ? ? ? ? //定义一个float类型的2维数组 numthree=new float[5][5];? ? ? //为它分配5行5列的空间大小 numthree[0][0]=1.1f;? ? ? ? ? ? //通过下标索引去访问? ? 1行1列=1.1 numthree[1][0]=1.2f;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 2行1列=1.2 ? ? b: int[][] numseven=new int[][]{{10,20,30},{40,50},{60}}; //没什么好说的如果你在看不懂 那就别学了! ? ? c:? list 二维数组: List[][]lists=new ArrayList[4][4]; 存放二维对象类型的list二维数组: List[][] list=new ArrayList[4][4]; 存放二维数组的list:? List list=new ArrayList()
(7)数组的遍历
a:?
int arr[][] = new int[][] { { 1 }, { 1, 2 }, { 1, 2, 3 } }; ?for (int i = 0; i < arr.length; i++) { ? int[] arr2 = arr[i]; ? for (int c = 0; c < arr2.length; c++) { ? System.out.print(arr2[c]); ? }
b: arr[i][j]的方式
c:
java 遍历arrayList的四种方法
package com.test;
import java.util.ArrayList; import java.util.Iterator; import java.util.List;
public class ArrayListDemo { ? ? public static void main(String args[]){ ? ? ? ? List list = new ArrayList(); ? ? ? ? list.add("luojiahui"); ? ? ? ? list.add("luojiafeng");
? ? ? ? //方法1 ? ? ? ? Iterator it1 = list.iterator(); ? ? ? ? while(it1.hasNext()){ ? ? ? ? ? ? System.out.println(it1.next()); ? ? ? ? }
? ? ? ? //方法2 ? ? ? ? for(Iterator it2 = list.iterator();it2.hasNext();){ ? ? ? ? ? ? System.out.println(it2.next()); ? ? ? ? }
? ? ? ? //方法3 ? ? ? ? for(String tmp:list){ ? ? ? ? ? ? System.out.println(tmp); ? ? ? ? }
? ? ? ? //方法4 ? ? ? ? for(int i = 0;i < list.size(); i ++){ ? ? ? ? ? ? System.out.println(list.get(i)); ? ? ? ? }
? ? } }
二:完整代码如下
package edu.tju.cs;
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;
public class MetroFloyd { ? ?private? final int MAX_SIZE = 92;// 86+1 + 5个未开通的 数组的空间,可以再大一些 ?private int k = 0; ?private int Vertex = 0;// 站点个数,通过读取每一条记录得到 ?private int[] Line = new int[MAX_SIZE];// 和path一起记录路径的 ?private int[][] Path = new int[MAX_SIZE][MAX_SIZE];// 记录路径 ?private int[][] Dist = new int[MAX_SIZE][MAX_SIZE];//记录各个站点间距离的 ?private List stationID =? new ArrayList();//得到站点编号 ?private Map mapIDName = new HashMap();// 站点编号和名称的对应关系 ? ?/* 功能:读取外部文件,把站点编号 放到stationID数组中,站点编号和名称的对应关系mapIDName,以及Vertex统计 ? * @param: originalPath 读文件件的路径名称 ? * @调用其他函数: null ? * @return: null ? */ ?// // 2305,刘园,117.123174,39.214493 ?public void readText(String originalPath){ ? try { ? ?Vertex = 0; ? ?String regex = ",";// 分割依赖符号,\\ ? ? ? ? ? ? String encoding="GBK"; ? ? ? ? ? ? File file=new File(originalPath); ? ? ? ? ? ? if(file.isFile() && file.exists()){ //判断文件是否存在 ? ? ? ? ? ? ? ? InputStreamReader read = new InputStreamReader( ? ? ? ? ? ? ? ? new FileInputStream(file),encoding);//考虑到编码格式 ? ? ? ? ? ? ? ? BufferedReader bufferedReader = new BufferedReader(read); ? ? ? ? ? ? ?// 原始一行数据和数据是否需要改变的符号 ? ? ? ? ? ? ? ? String originalLine = null; ? ? ? ? ? ? ? ? originalLine = bufferedReader.readLine();// 第一行列标示符过滤掉 ? ? ? ? ? ? ? ? if(originalLine == null){ ? ? ? ? ? ? ? ? ? read.close(); ? ? ? ? ? ? ? ? ? ? bufferedReader.close(); ? ? ? ? ? ? ? ? ?return; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? stationID.add(0); // 无效值,因为是从站点编号是从1开始的 ? ? ? ? ? ? ? ? while((originalLine = bufferedReader.readLine()) != null){? ? ? ? ? ? ? ? ? ? ? ? ?// 字符串分隔 ? ? ? ? ? ? ? ? ?String tmp[] = originalLine.split(regex); ? ? ? ? ? ? ? ? ?// 如果符合重新合成 ? ? ? ? ? ? ? ? ?stationID.add(Integer.parseInt(tmp[0])); ? ? ? ? ? ? ? ? ?mapIDName.put(Integer.parseInt(tmp[0]), tmp[1]