黑马程序员技术交流社区
标题:
今天练习这道题的时候没什么思路,求解答,谢谢!~
[打印本页]
作者:
samge
时间:
2016-1-8 00:03
标题:
今天练习这道题的时候没什么思路,求解答,谢谢!~
输入N个城市,是字母形式,名字中间没有空格,碰到###结束,然后手动输入两两距离
比如, (如果输入3个城市) 那就如下 1-2相距300 1-3相距500 2-3相距200
* 1 2 3
* 1 0 300 500
* 2 300 0 200
* 3 500 300 0
* 输入 两个城市名称
* 输出 距离
作者:
dengwenqiang
时间:
2016-1-8 00:03
全手写,思路也很全,不容易啊,楼主请采纳我的答案吧~
public class CitysDistance {
public static void main(String[] args) {
// 创建map集合存储城市和对应编号
HashMap<String, Integer> hm = new HashMap<String, Integer>();
Scanner sc = new Scanner(System.in);
System.out.println("请输入任意数量的城市,以###号结束");
int count = 0;// 记录每个城市对应的索引
while (true) {
String city = sc.nextLine();
if ("###".equals(city)) {
break;
} else {
hm.put(city, ++count);
}
}
// 创建一个二维数组表示两两城市的距离
int[][] distance = new int[count][count];
// 记录两两城市间的距离
System.out.println("请录入两两城市间的距离:");
for (int i = 0; i < distance.length; i++) {
for (int j = 0; j < distance.length; j++) {
// 键盘录入距离
distance[i][j] = sc.nextInt();
}
}
// 方便查询,做成死循环
while (true) {
// 键盘录入两个城市
System.out.println("请输入你想要查询的两个城市:");
String city1 = sc.next();
String city2 = sc.next();
// 通过键找到值,而这个值又作为二维数组的索引
int index1 = hm.get(city1);
int index2 = hm.get(city2);
// 通过索引找到距离
System.out.println(city1 + "和" + city2 + "的距离是:"
+ distance[index1 - 1][index2 - 1]);
System.out.println("还要查询吗,查询则按1,不查询按2");
int num = sc.nextInt();
if (num==1) {
continue;
}else if (num==2) {
break;
}else{
System.out.println("输入错误,下次再会!");
break;
}
}
}
}
作者:
擎天柱
时间:
2016-1-8 14:31
用二维数组就好了,城市名称就是下标;如果城市名不是数值,就增加x,y两个变量记录每个城市的坐标。
作者:
胆小的狙击手
时间:
2016-1-8 23:40
同意一楼的思路,但是,我觉得应该把Integer的索引作为键,String的城市名作为值会比较合适一点
作者:
samge
时间:
2016-1-9 00:23
胆小的狙击手 发表于 2016-1-8 23:40
同意一楼的思路,但是,我觉得应该把Integer的索引作为键,String的城市名作为值会比较合适一点 ...
如果用索引作为键的话,那样会出现值相同,也就是相同城市对应不同索引的问题吧
作者:
不要轻言放弃
时间:
2016-1-9 01:26
此题很有水平
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2