Map集合练习题(坐公交车)

题目要求

【1】将以下车站对应关系的数据存储到map集合中,
key:表示站编号,value:表示站名,
并遍历打印(可以不按顺序打印):

 站编号和站名对应关系如下:
1 朱辛庄
2 育知路
3 平西府
4 回龙观东大街
5 霍营
6 育新
7 西小口
8 永泰庄
9 林萃桥
10 森林公园南门
11 奥林匹克公园
12 奥体中心
13 北土城
14 安华桥
15 安德里北街
16 鼓楼大街
17 什刹海
18 南锣鼓巷
19 中国美术馆   
计算地铁票价规则:

总行程 3站内(包含3站)收费3元,
3站以上但不超过5站(包含5站)的收费4元,
5站以上的,在4元的基础上,每多1站增加2元,
10元封顶
需要对键盘录入的上车站
和到达站进行判断,如果没有该站,
提示重新输入,直到站名存在为止
每站需要2分钟


需要提供的方法

1.遍历Map(有两种方式——用keySe或者用entrySet)
2.需要调用Mao的获取方法——containsValue(验证是否存在)
3.计算该站的序号时,先获取Value,利用其get(key)来调用序号的具体值

具体代码实现(有注释)

import javax.management.openmbean.CompositeType;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.concurrent.ForkJoinPool;

public class Demo07 {
    
    
    public static void main(String[] args) {
    
    

        HashMap<Integer, String> hm = new HashMap<Integer, String>();
        hm.put(1, "朱辛庄");
        hm.put(2, "育知路");
        hm.put(3, "平西府");
        hm.put(4, "回龙观东大街");
        hm.put(5, "霍营");
        hm.put(6, "育新");
        hm.put(7, "西小口");
        hm.put(8, "永泰庄");
        hm.put(9, "林萃桥");
        hm.put(10, "森林公园南门");
        hm.put(11, "奥林匹克公园");
        hm.put(12, "奥体中心");
        hm.put(13, "北土城");
        hm.put(14, "安华桥");
        hm.put(15, "安德里北街");
        hm.put(16, "鼓楼大街");
        hm.put(17, "什刹海");
        hm.put(18, "南锣鼓巷");
        hm.put(19, "中国美术馆 ");
        System.out.println("-车站信息-");//遍历车站
        System.out.println("(序号)+(站名)");
        //利用Map的两种遍历方式:
        //方式一:
        Set<Integer> keySet = hm.keySet();
        for (Integer key : keySet) {
    
    
            String value = hm.get(key);
            System.out.println(key + "," + value);
        }
        //方式二:
//        Set<Map.Entry<Integer, String>> entrySet = hm.entrySet();
//        for(Map.Entry<Integer, String> me:entrySet){
    
    
//            Integer key = me.getKey();
//            String value = me.getValue();
//            System.out.println(key+","+value);
//        }

//创建初始值(先建类型,在确定车站时在确定具体的值,为了便于后面获取车站的序号)
        Scanner sc = new Scanner(System.in);
        String start;
        String end;
        //上车站的确定
        while (true) {
    
    
            System.out.println("请输入上车站");
             start = sc.nextLine();

            if (hm.containsValue(start)) {
    
    
                System.out.println("输入成功");
                break;
            } else {
    
    
                System.out.println("该站不存在,请重新输入");
            }
        }
        //下车站的确定

        while (true) {
    
    
            System.out.println("请输入下车站");
             end = sc.next();
            if (hm.containsValue(end)) {
    
    
                System.out.println("输入成功");
                break;
            } else {
    
    
                System.out.println("该站不存在,请重新输入");
            }
        }

//建立值
        int startNumber = 0;
        int endNumber=0;
        int middle=0;

        //上车站点的序号
        Set<Integer> keySet1 = hm.keySet();
        for(Integer key1:keySet){
    
    
               if(start.equals(hm.get(key1))){
    
    
                   startNumber=key1;
               }
            if(end.equals(hm.get(key1))){
    
    
                endNumber=key1;
            }
        }
        //简化版(只可从序号小的站点出发)——后续可改良
        if(startNumber>endNumber){
    
    
            middle=startNumber-endNumber;
        }else {
    
    
           middle= endNumber-startNumber;
        }

        //计算票价
//        计算地铁票价规则:
//        总行程 3站内(包含3站)收费3元,
//        3站以上但不超过5站(包含5站)的收费4元,
//        5站以上的,在4元的基础上,每多1站增加2元,
//        10元封顶;
        int money=0;
        if(middle<=3){
    
    
            money=3;
        }else  if(middle>3&&middle<=5){
    
    
            money=4;
        }else  if(middle>=5){
    
    
            money=4+(endNumber-5)*2;
        }
        money=money>10?10:money;
        int time=middle*2;

        System.out.println("从"+start+"站到"+end+"站需要"+
                money+"的钱,需要"+time+"分钟");





    }
}

猜你喜欢

转载自blog.csdn.net/m0_59619191/article/details/120304698