1. 程式人生 > >Java練習題_Map集合,遍歷車站編號及名稱、計算地鐵票價。

Java練習題_Map集合,遍歷車站編號及名稱、計算地鐵票價。

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