项目开始:

​ 昨天的Java学习到了Map集合,有一个公交线路的Demo,在编程过程中出现了一些问题,写篇博客记录一下。这个项目的需求是实现输入上车站和下车站,预估车程耗时并输出车费。

项目分析与实现:

​ 看到需求后,第一考虑就是通过Map来创建集合并将数据添加到集合中。

Map<Integer,String> map=new HashMap<>();map.put(1 ,"朱辛庄");map.put(2 ,"育知路");map.put(3 ,"平西府");map.put(4 ,"回龙观东大街");map.put(5 ,"霍营");map.put(6 ,"育新");map.put(7 ,"西小口");map.put(8 ,"永泰庄");map.put(9 ,"林萃桥");map.put(10 ,"森林公园南门");map.put(11 ,"奥林匹克公园");map.put(12 ,"奥体中心");map.put(13 ,"北土城");map.put(14 ,"安华桥");map.put(15 ,"安德里北街");map.put(16 ,"鼓楼大街");map.put(17 ,"什刹海");map.put(18 ,"南锣鼓巷");map.put(19 ,"中国美术馆" );

在添加完数据后创建Scanner对象来接收控制台输入并对比集合中的数据,通过get方法获取键(车站编号)。

Scanner sc=new Scanner(System.in);
System.out.println("请输入上车车站");
String aboardStation=sc.nextLine();                        //上车车站的录入
System.out.println("请输入下车车站");
String debusStation==sc.nextLine();;                              //下车车站的录入
int key1=0,key2=0;
for (Map.Entry<Integer, String> entry : entries) {if (entry.getValue().equals(aboardStation)){key1=entry.getKey();}}
for (Map.Entry<Integer, String> entry1 : entries) {if (entry1.getValue().equals(debusStation)){key2=entry1.getKey();}
}

​ 原本是这样做的,但是在编写的时候就发现了一些逻辑上的问题。第一在上车车站的录入后立刻录入下车车站就实现不了题目例示效果(先判断上车车站的合法性再接收下车车站),且无标志位来判断上车车站是否存在。于是做出以下修改。

Scanner sc=new Scanner(System.in);System.out.println("请输入上车车站");String aboardStation=sc.nextLine();String debusStation=null;int key1=0,key2=0;int flag1=0,flag2=0;Set<Map.Entry<Integer, String>> entries = map.entrySet();for (Map.Entry<Integer, String> entry : entries) {if (entry.getValue().equals(aboardStation)){key1=entry.getKey();flag1=1;System.out.println("请输入下车车站");debusStation=sc.nextLine();for (Map.Entry<Integer, String> entry1 : entries) {if (entry1.getValue().equals(debusStation)){key2=entry1.getKey();flag2=1;break;}}break ;}}

​ 修改后,嵌套的for循环就可以实现在上车车站录入正确之后再进行下车车站的录入和验证合法性,且添加标志位实现了参数存在性的验证,用for循环的break也少量的提高了代码的运行效率。

​ 最后就是一些简单的判断和输出语句。

if (flag1==0) System.out.println("您输入的上车车站不存在!");if (flag1==1&&flag2==0) System.out.println("您输入的下车车站不存在!");if (flag1==1&&flag2==1){int stationNum=key2-key1;System.out.println("您坐了"+stationNum+"站"+"大约需要"+stationNum*2+"分钟!");int money=(stationNum-5)*2+4;if (stationNum<4&&stationNum>0) System.out.println("您从"+aboardStation+"到"+debusStation+"一共收费三元,感谢您的乘坐!");else if (stationNum>3&&stationNum<6) System.out.println("您从"+aboardStation+"到"+debusStation+"一共收费4元,感谢您的乘坐!");else if (stationNum>5&&stationNum<11) System.out.println("您从"+aboardStation+"到"+debusStation+"一共收费"+money+"元,感谢您的乘坐!");else System.out.println("您从"+aboardStation+"到"+debusStation+"一共收费14元,感谢您的乘坐!");System.out.println("-----------------------------");}}
}

总结:

这个案例非常简单,也没有复杂的算法和逻辑,需要的就是思维的严密性,后期做题还是得考虑周全。

Map集合及其遍历案例:车站Demo相关推荐

  1. Map集合及遍历 debug用法 以及集合的斗地主应用练习 D190326

    Map集合及遍历 debug用法 以及集合的斗地主应用练习 第一个独立应用:斗地主,分步骤一点点把项目拆分每一步去完成. 01_第一章:回顾_三种集合的存储方式: 02_第一章:Map集合_常用方法: ...

  2. [Java基础]Map集合的遍历

    Map集合是Java中非常常用的一个集合,通过Map集合可以实现对数据的快速检索和插入删除等操作:同样对Map集合的遍历也是十分重要的:如果你之前学过C++,那么对于Map的遍历操作可就不能像是C++ ...

  3. android Map集合的遍历

    今天,讲讲Set集合的遍历的使用. 1. Map集合的遍历之 键值对对象找 键和值: package cn.itcast_01;import java.util.HashMap; import jav ...

  4. 第三次学JAVA再学不好就吃翔(part92)--Map集合的遍历

    学习笔记,仅供参考,有错必纠 Map集合的遍历 方法1(利用键找值) 由于Map集合中没有iterator方法,所以如果我们想要遍历Map,则需要先提取出键,拿到Set集合,再利用Set集合的iter ...

  5. Map集合的遍历方法

    2019独角兽企业重金招聘Python工程师标准>>> Map集合的遍历方法  一.通过Map.Keyset遍历key和value,普遍使用,二次取值 //定义一个Map集合 Map ...

  6. 增强型for循环与Map集合的遍历

    Map接口的遍历有以下几种方法: 使用map.values()方法,先把value的值都放在一个Collection集合中. 使用map.entrySet()方法. 使用map.keySet()方法. ...

  7. java遍历一个map集合_Java遍历Map集合的四种方式

    Map 集合的遍历与 List 和 Set 集合不同.Map 有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历.Map 以及实现 Map 的接口类(如 HashMap.Tr ...

  8. 【java】Map集合的遍历方式有几种?

    因为下一个博客想写Hashtable集合下的一个子类Properties集合,但是Map集合的遍历方式又有点遗忘了........... 下面通过API来复习一下: 文章目录 1. Map集合的第一种 ...

  9. Map集合的遍历方式

    1.Map集合的特点 Map集合每次存储两个元素,键不可重复,值可以重复. 2.遍历的方式 Map集合遍历方式1 得到所有的键存放在set集合中–KeySet() 遍历键所在的集合,得到每一个键. 通 ...

最新文章

  1. (MIDP)Prediction of potential disease-associated microRNAs based on random walk
  2. android zip解压缩
  3. [BZOJ1188/Luogu3185][HNOI2007]分裂游戏
  4. Java 8 中处理日期和时间示例
  5. MyEclipse 16(汉化版)安装教程
  6. 关于SQL Server数据库中的标识列
  7. 此项目的默认Web访问模式设置为文件共享, 但是无法从路径(此为转贴)
  8. Two Strings Are Anagrams
  9. 网络流 增广路 入门很好的文章
  10. 怎样设置才能允许外网访问MySQL
  11. 前端开源项目周报0103
  12. svn服务器搭建和使用_使用Gitea搭建自己的Git服务器
  13. Linux安装jdk详细步骤
  14. 企业如何推动组织变革?
  15. nexus私服npm包踩坑记录
  16. JNDI-Injection-With-LDAP-Unserialize
  17. Android PPP协议
  18. Graph Embedding模型【Node2Vec】学习笔记
  19. 如何用html制作一个动态烟花,视频加烟花特效 视频如何制作烟花效果|视频上添加动态的焰火效果...
  20. ASP.Net0626快播影院视频网的设计与实现

热门文章

  1. 更换虚拟机的内核版本
  2. 各种系统路径和文件名长度的最大限制
  3. mysql全文检索_Mysql的全文检索
  4. 验证码这样做,瞬间高出一个逼格
  5. Java程序设计:五子棋(三)——悔棋
  6. IIC读写EEPROM
  7. 关于学习ssh框架的体会
  8. 畅购商城六:微服务网关与jwt令牌
  9. java正则提取文本手机号
  10. soft nproc 与 soft nofile