package findmiles;
import java.util.ArrayList;
import java.util.Scanner;
public class Findmiles {
private ArrayList<String> city = new ArrayList<String>();
private long[][] distance;
public void inputCity() {
Scanner in = new Scanner(System.in);
while (!in.next().equals("###")) {
city.add(in.next());
in.close();
}
}
public void inputDistance() {
Scanner in = new Scanner(System.in);
int i, j;
int n = city.size();
distance = new long[n][n];
for (i = 0; i < city.size(); i++)
for (j = 0; j < city.size(); j++)
distance[i][j] = in.nextLong();
in.close();
}
public long getDistance(String a, String b) {
int n = 0, m = 0;
for (String k : city)
if (k.equals(a))
n = city.indexOf(k);
for (String j : city)
if (j.equals(b))
m = city.indexOf(j);
return distance[n][m];
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Findmiles dis = new Findmiles();
dis.inputCity();
dis.inputDistance();
System.out.println(dis.getDistance(in.next(), in.next()));
in.close();
}
}
我想要做的是输入708时输出708:
Hagzou Hugzou Jigxng ### 0 1108 708 1108 0 994 708 994 0 Hagzou Jigxng
这是一个计算两个城市之间距离的计划。首先输入一些城市名称,然后以&#34; ###&#34;结尾。然后输入距离矩阵,当名称相同时,距离为0.然后输入两个城市的名称,并返回它们之间的距离。
答案 0 :(得分:3)
好的,在遍历代码之后,我发现你正在关闭循环中inputCity()
内的扫描器,你需要将它移到循环之外,因为你在每次迭代后关闭它,这可能是给你的在第二次迭代时IllegalStateException
,在第一次迭代时应该没有问题,但在第二次迭代时它会尝试从闭合的输入流中获取值。
所以你的代码应该是
public void inputCity() {
Scanner in = new Scanner(System.in);
while (!in.next().equals("###")) {
city.add(in.next());
}
in.close()
}
对于inputDistance()
方法,应该没有问题(至少对于输入流),因为你在所有循环之后关闭输入,因为如果没有添加大括号那么它应该采用下一个语句 ONLY 强>