题目要求
【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+"分钟");
}
}