查找里程
(10分)
题目内容:
下图为国内主要城市之间的公路里程:
你的程序要读入这样的一张表,然后,根据输入的两个城市的名称,给出这两个城市之间的里程。
注意:任何两个城市之间的里程都已经给出,不需要计算经第三地中转。
注意:你并不需要去录入上图的数据,数据是在程序输入中给的。
输入格式:
首先,你会读到若干个城市的名字。每个名字都只是一个英文单词,中间不含空格或其他符号。当读到名字为“###”(三个#号)时,表示城市名字输入结束,###并不是一个城市的名字。如果记读到的城市名字的数量为n。
然后,你会读到nxn的一个整数矩阵。第一行的每一个数字,表示上述城市名单中第一个城市依次到另一个城市之间的里程。表中同一个城市之间的里程为0。
最后,你会读到两个城市的名字。
输出格式:
输出这两个城市之间的距离。
输入样例:
Hagzou HugzouJigxng ###
0 1108708
1108 0994
708 9940
Hagzou Jigxng
输出样例:
708
-------------------------------------------------------------实现--------------------------------------------------------------
import java.util.ArrayList;
import java.util.Scanner;public class Citys{
public static void main(String[] args) {
ArrayList<String> city=new ArrayList<String>();//新建一个String类的动态数组对象,city
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()==true)//判断是否有输入
{
String next=scanner.next();//scanner是一个已创建的输入类对象,用next方法获取输入
if(next.equals("###"))//比较是否相等,即输入的字符串与###是否相等
{
break;
}
// if(next.equals("Huzhou"))//把Huzou改为Suzhou,在线判断机的bug,可忽略
// {
// // next="Suzhou";
// }
//
city.add(next);//将scanner获取的字符串添加到city这个集合中
}
int [][] miles=new int [city.size()][city.size()];//新建表示里程的二维数组,.size返回元素的个数,
//个数就是问题描述中的n*n,用n定义数组的大小
for(int i=0;i<city.size();i++){//循环读入n*n个数字,即里程miles
for(int j=0;j<city.size();j++){
miles[i][j]=scanner.nextInt();
}
}
int i=city.indexOf(scanner.next());//用indexOf方法返回读入城市的索引值
int j=city.indexOf(scanner.next());//因为二维数组的元素代表两个城市之间的里程,
System.out.println(miles[i][j]);//所以直接用两个索引值就可得到一个二维元素,即里程
scanner.close();//关闭输入流,释放内存,否则会一直占用内存
//PS:注意城市名字是由scanner对象读入,给next变量存储,再用add方法传递给city对象
//所以city可以获取scanner输入流中字符串(城市)的索引值,i指定一维,j指定二维
}
}