A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

7黑马币
输入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
* 输入 两个城市名称
* 输出 距离

最佳答案

查看完整内容

全手写,思路也很全,不容易啊,楼主请采纳我的答案吧~ public class CitysDistance { public static void main(String[] args) { // 创建map集合存储城市和对应编号 HashMap hm = new HashMap(); Scanner sc = new Scanner(System.in); System.out.println("请输入任意数量的城市,以###号结束"); int count = 0;// 记录每个城市对应的索引 while (true) { String ...

评分

参与人数 1黑马币 +3 收起 理由
^梦圉^ + 3 此题解得不错,思维很清晰!获益匪浅,果断.

查看全部评分

6 个回复

倒序浏览
全手写,思路也很全,不容易啊,楼主请采纳我的答案吧~

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-9 22:50
回复 使用道具 举报
用二维数组就好了,城市名称就是下标;如果城市名不是数值,就增加x,y两个变量记录每个城市的坐标。
回复 使用道具 举报
同意一楼的思路,但是,我觉得应该把Integer的索引作为键,String的城市名作为值会比较合适一点
回复 使用道具 举报
胆小的狙击手 发表于 2016-1-8 23:40
同意一楼的思路,但是,我觉得应该把Integer的索引作为键,String的城市名作为值会比较合适一点 ...

如果用索引作为键的话,那样会出现值相同,也就是相同城市对应不同索引的问题吧
回复 使用道具 举报
此题很有水平
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马