Java练习题_Map集合,遍历车站编号及名称、计算地铁票价。

时间:2024-02-24 19:23:45

【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 }