飞机地铁的java项目怎么做_个人项目-地铁出行路线规划(Java代码实现)

定义了一个主函数的类,用来运行整个程序。 // 解析 subway.txt 获取地铁线路图信息

public static void subwayMap() {

String f = "subway.txt";

try (FileReader r = new FileReader(f);

BufferedReader br = new BufferedReader(r)

) {

String line;

while ((line = br.readLine()) != null) {

String[] tokens = line.split(": ", 2); // 分离线路及站点

SubwayLine sl = new SubwayLine();

sl.name = tokens[0];

String[] tokens2 = tokens[1].split(" "); // 分离各个站点

for(String s: tokens2) {

Boolean isTransfer = s.contains("#");

Station station = new Station();

if(isTransfer) {

station.isTransferStation = true;

String[] tokens3 = s.split("#"); // 分离换乘站信息

station.name = tokens3[0];

for(int i = 1; i < tokens3.length; i++) {

if(tokens3[i].equals("1"))

station.lines.add("1号线");

else if(tokens3[i].equals("2"))

station.lines.add("2号线");

else if(tokens3[i].equals("4"))

station.lines.add("4号线");

else if(tokens3[i].equals("5"))

station.lines.add("5号线");

else if(tokens3[i].equals("6"))

station.lines.add("6号线");

else if(tokens3[i].equals("7"))

station.lines.add("7号线");

else if(tokens3[i].equals("8北"))

station.lines.add("8号线北");

else if(tokens3[i].equals("8南"))

station.lines.add("8号线南");

else if(tokens3[i].equals("9"))

station.lines.add("9号线");

else if(tokens3[i].equals("10"))

station.lines.add("10号线");

else if(tokens3[i].equals("13"))

station.lines.add("13号线");

else if(tokens3[i].equals("14西"))

station.lines.add("14号线西");

else if(tokens3[i].equals("14东"))

station.lines.add("14号线东");

else if(tokens3[i].equals("15"))

station.lines.add("15号线");

else if(tokens3[i].equals("16"))

station.lines.add("16号线");

else if(tokens3[i].equals("八通"))

station.lines.add("八通线");

else if(tokens3[i].equals("房山"))

station.lines.add("房山线");

else if(tokens3[i].equals("昌平"))

station.lines.add("昌平线");

else if(tokens3[i].equals("亦庄"))

station.lines.add("亦庄线");

else if(tokens3[i].equals("燕房"))

station.lines.add("燕房线");

else if(tokens3[i].equals("S1"))

station.lines.add("S1线");

else if(tokens3[i].equals("西郊"))

station.lines.add("西郊线");

else if(tokens3[i].equals("首都机场"))

station.lines.add("首都机场线");

}

station.line = tokens[0];

stations.add(station);

sl.stations.add(station);

}

else {

if(s.contains("!"))

continue;

station.isTransferStation = false;

station.name = s;

station.line = tokens[0];

stations.add(station);

sl.stations.add(station);

}

}

lines.add(sl);

}

} catch (IOException e) {

e.printStackTrace();

}

} public static String getLineName(Station station) {

for (SubwayLine s : lines) {

for(Station st : s.stations) {

if(st.name.equals(station.name))

return st.line;

}

}

return "";

} public static void main(String[] args) throws IOException {

switch (args[0]) {

case "-map":

if (args.length == 2) {

subwayMap();

System.out.println("数据读取成功 ~");

} else {

System.out.println("输入格式有误,请重新输入。");

break;

}

break;

case "-a":

subwayMap();

int flag1 = 0; //判断该线路是否在所有线路中

for(SubwayLine sl : lines) {

if(sl.name.equals(args[1])) {

flag1 = 1;

break;

}

}

if(flag1 == 0) {

System.out.println("该线路不存在,请重新输入。");

break;

}

if (args.length == 6 && args[4].equals("-o")) {

for(int i = 0; i < lines.size(); i++) {

if(args[1].equals(lines.get(i).name)) {

String str = lines.get(i).name+"所经过的站点为: ";

for(Station s : lines.get(i).stations) {

if(s.isTransferStation) {

str += s.name+"(可换乘";

for(String st: s.lines) {

str += " "+st;

}

str +=") ";

}

else {

str += s.name+" ";

}

}

byte[] text = str.getBytes();

File file = new File("/Users/bunnywwwwyj/Desktop/BeiJingSubway", "station.txt");

if(file.exists() == true)

file.delete();

file.createNewFile();

FileOutputStream out = new FileOutputStream(file);

out.write(text);

out.close();

break;

}

}

String f2 = "/Users/bunnywwwwyj/Desktop/BeiJingSubway/station.txt";

try (FileReader r2 = new FileReader(f2);

BufferedReader br2 = new BufferedReader(r2)

) {

String line2;

while ((line2 = br2.readLine()) != null) {

System.out.println(line2);

}

} catch (IOException e) {

e.printStackTrace();

}

}

else {

System.out.println("输入格式有误,请重新输入。");

break;

}

break;

case "-b":

subwayMap();

if(args[1].equals(args[2])) {

System.out.println("起点站与终点站不能相同");

break;

}

int flag2 = 0; //判断起点站是否在所有站点中

int flag3 = 0; //判断终点站是否在所有站点中

for(Station s : stations) {

if(s.name.equals(args[1]))

flag2 = 1;

if(s.name.equals(args[2]))

flag3 = 1;

if(flag2 == 1 && flag3 == 1)

break;

}

if(flag2 == 0) {

System.out.println("该起点站不存在,请重新输入。");

break;

}

if(flag3 == 0) {

System.out.println("该终点站不存在,请重新输入。");

break;

}

if (args.length == 7 && args[3].equals("-map") && args[5].equals("-o")) {

Result r = Dijkstra.calculate(new Station(args[1]), new Station(args[2]));

int total = r.getPassStations().size()+1;

String str = "共经过"+total+"站\n";

str += r.getStartStation().name+"\n";

String line = getLineName(r.getStartStation());

for (int i = 0; i < r.getPassStations().size(); i++) {

if(r.getPassStations().get(i).isTransferStation) {

str += r.getPassStations().get(i).name+"\n";

if (i != r.getPassStations().size()-1 && !line.equals(getLineName(r.getPassStations().get(i+1)))) {

str += "换乘"+getLineName(r.getPassStations().get(i+1))+"\n";

line = getLineName(r.getPassStations().get(i+1));

}

}

else

str += r.getPassStations().get(i).name+"\n";

}

byte[] text = str.getBytes();

File file = new File("/Users/bunnywwwwyj/Desktop/BeiJingSubway", "routine.txt");

if(file.exists() == true)

file.delete();

file.createNewFile();

FileOutputStream out = new FileOutputStream(file);

out.write(text);

out.close();

String f3 = "/Users/bunnywwwwyj/Desktop/BeiJingSubway/routine.txt";

try (FileReader r3 = new FileReader(f3);

BufferedReader br3 = new BufferedReader(r3)

) {

String line3;

while ((line3 = br3.readLine()) != null) {

System.out.println(line3);

}

} catch (IOException e) {

e.printStackTrace();

}

}

else {

System.out.println("输入格式有误,请重新输入。");

break;

}

break;

default:

System.out.println("输入格式有误,请重新输入。");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值