题目
【1】将以下车站对应关系的数据存储到map集合中,
key:表示站编号,value:表示站名,
并遍历打印(可以不按顺序打印):
站编号和站名对应关系如下:
1 朱辛庄
2 育知路
3 平西府
4 回龙观东大街
5 霍营
6 育新
7 西小口
8 永泰庄
9 林萃桥
10 森林公园南门
11 奥林匹克公园
12 奥体中心
13 北土城
14 安华桥
15 安德里北街
16 鼓楼大街
17 什刹海
18 南锣鼓巷
19 中国美术馆
【2】计算地铁票价规则:
总行程 3站内(包含3站)收费3元,
3站以上但不超过5站(包含5站)的收费4元,
5站以上的,在4元的基础上,每多1站增加2元,
10元封顶;
需要对键盘录入的上车站
和到达站进行判断,如果没有该站,
提示重新输入,直到站名存在为止
每站需要2分钟
示范如下:
请输入上车站:
流沙河
您输入的上车站:流沙河站不存在,请重新输入上车站:
骑龙
您输入的上车站:骑龙站不存在,请重新输入上车站:
朱辛庄
您以确定在朱辛庄上站!
请输入到达站:
沙河
您输入的到达站:沙河站不存在,请重新输入到达站:
西二旗
您输入的到达站:西二旗站不存在,请重新输入到达站:
西小口
您以确定在朱辛庄下站!
从朱辛庄到西小口共经过6站收费6元,大约需要12分钟
解答代码
import java.util.*;
public class MapTest4 {
/**
* 【1】将以下车站对应关系的数据存储到map集合中,
* key:表示站编号,value:表示站名,
* 并遍历打印(可以不按顺序打印):
* ------------------------------------
* 站编号和站名对应关系如下:
* 1 朱辛庄
* 2 育知路
* 3 平西府
* 4 回龙观东大街
* 5 霍营
* 6 育新
* 7 西小口
* 8 永泰庄
* 9 林萃桥
* 10 森林公园南门
* 11 奥林匹克公园
* 12 奥体中心
* 13 北土城
* 14 安华桥
* 15 安德里北街
* 16 鼓楼大街
* 17 什刹海
* 18 南锣鼓巷
* 19 中国美术馆
* ------------------------------------
*
* 【2】计算地铁票价规则:
* 总行程 3站内(包含3站)收费3元,
* 3站以上但不超过5站(包含5站)的收费4元,
* 5站以上的,在4元的基础上,每多1站增加2元,
* 10元封顶;
*
* 需要对键盘录入的上车站
* 和到达站进行判断,如果没有该站,
* 提示重新输入,直到站名存在为止
* 每站需要2分钟
* @param args
*/
public static void main(String[] args) {
HashMap<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,"中国美术馆");
//并遍历打印(可以不按顺序打印):
Set<Map.Entry<Integer, String>> entries = map.entrySet();
for (Map.Entry<Integer, String> entry:entries) {
Integer key = entry.getKey();
String value = entry.getValue();
System.out.println(key+":"+value);
}
//需要对键盘录入的上车站
//和到达站进行判断,如果没有该站,
//提示重新输入,直到站名存在为止
//每站需要2分钟
Scanner sc = new Scanner(System.in);
System.out.println("请输入上车站:");
String startValue = sc.next();
Collection<String> values = map.values();
if (values.contains(startValue)){
System.out.println("您已确认在"+startValue+"上站!");
}else {
while (true){
System.out.println("您输入的上车站:"+startValue+"站不存在,请重新输入:");
startValue = sc.next();
if (values.contains(startValue)){
System.out.println("您已确认在"+startValue+"上站!");
break;
}
}
}
System.out.println("请输出到达站:");
String endValue = sc.next();
if (values.contains(endValue)){
System.out.println("您已确定在"+endValue+"下站");
}else {
while (true){
System.out.println("您输入的下车站:"+endValue+"站不存在,请重新输入:");
endValue = sc.next();
if (values.contains(endValue)){
System.out.println("您已确认在"+endValue+"下站!");
break;
}
}
}
//获取上站和下站value对应的key
//开始站的key
int startKey = 0;
for (Map.Entry<Integer, String> entry:entries) {
if (entry.getValue().equals(startValue)){
startKey = entry.getKey();
}
}
//到达站的key
int endKey = 0;
for (Map.Entry<Integer, String> entry:entries) {
if (entry.getValue().equals(endValue)){
endKey = entry.getKey();
}
}
//计算价格
//总行程 3站内(包含3站)收费3元,
//3站以上但不超过5站(包含5站)的收费4元,
//5站以上的,在4元的基础上,每多1站增加2元,
//10元封顶;
//价格和时间
int price=0;
int time = (endKey-startKey)*2;
if (endKey-startKey<=3){
price =3;
System.out.println("从"+startValue+"到"+endValue+"共经过"+(endKey-startKey)+"站"+"收费"+price+"元,大约需要"+time+"分钟");
}else if (endKey-startKey>3&&endKey-startKey<=5) {
price = 4;
System.out.println("从" + startValue + "到" + endValue + "共经过" + (endKey - startKey) + "站" + "收费" + price + "元,大约需要" + time + "分钟");
}else if (endKey-startKey>5){
if (endKey-startKey-5<=3){
price=4+(endKey-startKey-5)*2;
System.out.println("从" + startValue + "到" + endValue + "共经过" + (endKey - startKey) + "站" + "收费" + price + "元,大约需要" + time + "分钟");
}else {
price=10;
System.out.println("从" + startValue + "到" + endValue + "共经过" + (endKey - startKey) + "站" + "收费" + price + "元,大约需要" + time + "分钟");
}
}
}
}
输出结果
1:朱辛庄
2:育知路
3:平西府
4:回龙观东大街
5:霍营
6:育新
7:西小口
8:永泰庄
9:林萃桥
10:森林公园南门
11:奥林匹克公园
12:奥体中心
13:北土城
14:安华桥
15:安德里北街
16:鼓楼大街
17:什刹海
18:南锣鼓巷
19:中国美术馆
请输入上车站:
安华桥
您已确认在安华桥上站!
请输出到达站:
中国美术馆
您已确定在中国美术馆下站
从安华桥到中国美术馆共经过5站收费4元,大约需要10分钟
注意获取键的方式方法就很快能做出来~