【1】将以下车站对应关系的数据存储到map集合中,
key:表示站编号,value:表示站名,
并遍历打印(可以不按顺序打印):
【2】计算地铁票价规则:
总行程 3站内(包含3站)收费3元,
3站以上但不超过5站(包含5站)的收费4元,
5站以上的,在4元的基础上,每多1站增加2元,
10元封顶;
需要对键盘录入的上车站
和到达站进行判断,如果没有该站,
提示重新输入,直到站名存在为止
每站需要2分钟
运行示范:
请输入上车站:
沙河
您输入的上车站:沙河不存在,请重新输入上车站:
上地
您输入的上车站:上地不存在,请重新输入上车站:
朱辛庄
请输入到达站:
沙河
您输入的到达站:沙河不存在,请重新输入到达站:
西二旗
您输入的到达站:西二旗不存在,请重新输入到达站:
西小口
从朱辛庄到西小口共经过6站收费6元,大约需要 12分钟
站编号和站名对应关系如下:
1 朱辛庄
2 育知路
3 平西府
4 回龙观东大街
5 霍营
6 育新
7 西小口
8 永泰庄
9 林萃桥
10 森林公园南门
11 奥林匹克公园
12 奥体中心
13 北土城
14 安华桥
15 安德里北街
16 鼓楼大街
17 什刹海
18 南锣鼓巷
19 中国美术馆
示例代码:
1 import java.util.HashMap;
2 import java.util.Scanner;
3 import java.util.Set;
4
5 public class TestDay19_6 {
6
7 public static void main(String[] args) {
8 HashMap<Integer, String> hm = new HashMap<>();
9 hm.put(1, "朱辛庄");
10 hm.put(2, "育知路");
11 hm.put(3, "平西府");
12 hm.put(4, "回龙观东大街");
13 hm.put(5, "霍营");
14 hm.put(6, "育新");
15 hm.put(7, "西小口");
16 hm.put(8, "永泰庄");
17 hm.put(9, "林萃桥");
18 hm.put(10, "森林公园南门");
19 hm.put(11, "奥林匹克公园");
20 hm.put(12, "奥体中心");
21 hm.put(13, "北土城");
22 hm.put(14, "安华桥");
23 hm.put(15, "安德里北街");
24 hm.put(16, "鼓楼大街");
25 hm.put(17, "什刹海");
26 hm.put(18, "南锣鼓巷");
27 hm.put(19, "中国美术馆");
28
29 //遍历车站
30 Set<Integer> sOut = hm.keySet();
31 for (Integer i : sOut) {
32 System.out.println(i + "--" + hm.get(i));
33 }
34
35 @SuppressWarnings("resource")
36 Scanner sc = new Scanner(System.in);
37 String sStart;
38 String sEnd;
39
40 // 获取上车站
41 while (true) {
42 System.out.println("请输入上车站:");
43 sStart = sc.nextLine();
44 if (hm.containsValue(sStart)) {
45 break;
46 } else {
47 System.out.println("站点不存在,请重新输入");
48 }
49 }
50
51 // 获取下车站
52 while (true) {
53 System.out.println("请输入到达站");
54 sEnd = sc.nextLine();
55 if (hm.containsValue(sEnd)) {
56 break;
57 } else {
58 System.out.println("站点不存在,请重新输入");
59 }
60 }
61
62 // 获取站点编号及间隔差
63 int iStart = 0;
64 int iEnd = 0;
65 int iSub;
66 Set<Integer> sKey = hm.keySet();
67 for (Integer i : sKey) {
68 if (sStart.equals(hm.get(i))) {
69 iStart = i;
70 }
71 if (sEnd.equals(hm.get(i))) {
72 iEnd = i;
73 }
74 }
75 if (iStart > iEnd) {
76 iSub = iStart - iEnd;
77 } else {
78 iSub = iEnd - iStart;
79 }
80
81 // 计算金额
82 int price;
83 if (iSub <= 3) {
84 price = 3;
85 } else if (iSub <= 5) {
86 price = 4;
87 } else {
88 price = 4 + (iSub - 5) * 2;
89 }
90 // 10元封顶
91 price = price > 10 ? 10 : price;
92
93 // 计算时间
94 int time = iSub * 2;
95
96 System.out.println("从[" + sStart + "]到[" + sEnd + "]共经过" + iSub + "站,收费" + price + "元,大约需要" + time + "分钟");
97
98 }
99 }