PRELOADER

不念过去 不负现在 不畏将来

当前文章 : 《城市距离》

12/4/2018 —— 

题目: 首先,你会读到若干个城市的名字。每个名字都只是一个英文单词,中间不含空格或其他符号。当读到名字为“###”(三个#号)时,表示城市名字输入结束,###并不是一个城市的名字。如果记读到的城市名字的数量为n。
然后,你会读到(N x N)的一个整数矩阵。第一行的每一个数字,表示上述城市名单中第一个城市依次到另一个城市之间的里程。表中同一个城市之间的里程为0。
最后,你会读到两个城市的名字。

输入示例:

Hagzou    Hugzou    Jigxng    ###
0    1108    708
1108    0    994
708    994    0
Hagzou    Jigxng

输出示例:

708

java代码:

package mileage;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

class Mileage {

     public ArrayList<String> cityList = new ArrayList<String>();
     public HashMap<String,Integer> mileage= new HashMap<String,Integer>();

    public void addCity(String e) {        
        if (!e.equals("###")) {
            cityList.add(e);
        }else {
        }
    }

    public void addmileage(int i,int j,int m) {
        mileage.put(""+cityList.get(i)+"-"+""+cityList.get(j), m);       
    }

    public int getMileage(String s) {
        return mileage.get(s);
    }
}

class Main{
    public static void main(String[] args) {
        Mileage cityMileage = new Mileage();
        Scanner in = new Scanner(System.in);
        String ac = in.next();
        do {
            cityMileage.addCity(ac);
            ac = in.next();
        } while (!ac.equals("###"));   

        int size = cityMileage.cityList.size();
        for (int i=0;i<size;i++ ) {
            for(int j=0;j<size;j++) {
                int mileage = in.nextInt();
                cityMileage.addmileage(i, j, mileage);
            }
        }

        String cityOne = in.next();
        String cityTwo = in.next();
        in.close();
        System.out.println("the distance of "+""+cityOne+" and "+""+cityTwo);
        int mileage = cityMileage.getMileage(""+cityOne+"-"+""+cityTwo);
        System.out.println(mileage);
    }

}

  • 0、这个题目中的城市数据,是需要前期自己输入的。
  • 1、首先是需要明确接口,需要有三个接口,一个用于添加城市,一个用于添加距离,一个用于返回距离。添加城市,存储于列表中。距离是两个城市之间唯一确定的,所以采用哈希表的方式存储,哈希表的键值为两个城市的名字,中间用“-”连接。采用位置对应的方式来确定输入的距离是表示两城市之间唯一确定的值。第三个返回一个数值的方法,返回哈希表中的键值,采用哈希表的get方法。
  • 2、由于在输入数据是,采用(N x N)的方式,所以其实表格中的数据是一一对应的,也就是说你想知道 A_city和 B_city之间的距离,那么你不论先输入那个城市的名称,后输入那个城市都是可以得到唯一的结果。
  • 3、在输入是,采用in.next()的方式,.next这种方式是采用next()方法是以换行或者空格符为分界线接收下一个String类型变量。所以可已不断地进行输入,在数据全部输入完后再关闭输入就可以向后执行,得到结果了。
  • 4、有意思的是,在输入时,其实是分为三部分的内容的,第一部分就是需要添加目标城市,并以”###”表示输入完成,所以此时需要采用do-while语句来判断这部分是否添加完成了。如果检测到”###”那么就不在继续添加城市,同时”###”不能添加进城市列表。第二部分的数据为城市之间的距离,此时为了输入的简洁明了,采用表格的方式,每当添加完一行数据就回车从下一行开始,程序会检测到回车,所以不影响结果。此时采用两层for循环,循环的判别条件为城市的个数N,若(N x N)表格输入完成后,for循环执行完成,自然就会向下执行。而第三种输入的内容很简单,因为这里表示两城市的名字,已知输入的数量为二,所以定义两个字符串变量就好。