地铁小程序(HashMap)

package SubMap;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class SubMap {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        Map<Integer, String> map = new HashMap<>();
        // 读取文件信息
        BufferedReader br = new BufferedReader(new FileReader("subway.txt"));
        String line;
        int n = 1;
        while ((line = br.readLine()) != null) {
            map.put(n++, line);
        }
        // 有序打印地铁站
        print(map);

        // 输出上站站名并记录站点号
        System.out.println("请输入上站站名称:");
        Map<Integer, String> up = Sub(sc, map);

        // 输出下站站点并记录站点号
        System.out.println("请输入下站站名称:");
        Map<Integer, String> down = Sub(sc, map);

        // 输出上下站点
        Set<Integer> upKey = up.keySet();
        for (Integer u : upKey) {
            Set<Integer> downKey = down.keySet();
            for (Integer d : downKey) {
                System.out.print(" 您的上站点是:" + up.get(u) + " 您的下站点是:" + down.get(d));

            }
        }
        // 计费
        money(up, down);
    }

    private static int money(Map<Integer, String> up, Map<Integer, String> down) {
        int n = 0;
        // 拿到上站集合中的键
        Set<Integer> upKey = up.keySet();
        // 遍历集合获得具体上站点号
        for (Integer upNum : upKey) {
            // 拿到下站集合中的键
            Set<Integer> downKey = down.keySet();
            // 遍历集合获得具体下站点号
            for (Integer downNum : downKey) {
                // 得到差值
                n = Math.abs(upNum - downNum);
            }
        }

        /*
         * 计费判断条件如下: 总行程在3站以内的,包括3站。那么收费3元 行程在4到6站的,包括6站。那么收费5元
         * 超过6站的,每增加一站,在原有收费5元基础上多收2元。10元封顶! 每个站点行程时间为2分钟
         */
        int money = 0;
        //
        if (n <= 3) {
            money = 3;
        } else if (n > 3 && n <= 6) {
            money = 5;
        } else if (n > 6) {
            int m = 5 + (n - 6) * 2;
            // 判断封顶
            if (m >= 10) {
                money = 10;
            } else {
                money = m;
            }
        }

        System.out.println(" 您本次共经过:" + n + "站,用时:" + (2 * n) + "分钟,收费:" + money + "元.欢迎下次乘车");

    }

    // 输出上站站名并记录站点号
    private static Map<Integer, String> Sub(Scanner sc, Map<Integer, String> map) {
        // 用来记录符合要求的站信息
        Map<Integer, String> maps = new HashMap<>();
        while (true) {
            // 键盘录入站点
            String sub = sc.nextLine();
            // 取键
            Set<Integer> key = map.keySet();
            for (Integer subKey : key) {
                // 判断是否存在该站点
                if (sub.equals(map.get(subKey))) {
                    // 添加进集合
                    maps.put(subKey, sub);
                    return maps;
                }
            }
            System.out.println("您输入的站点有误,请重新输入");
        }
    }

    // 打印出地铁站
    private static void print(Map<Integer, String> map) {
        Iterator<Integer> subKey = map.keySet().iterator();
        while (subKey.hasNext()) {
            int sub = subKey.next();
            System.out.println("第" + sub + "站:" + map.get(sub));
        }

    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春哥一号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值