为什么我的代码有IllegalStateException错误

时间:2018-05-10 07:35:07

标签: java arraylist

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.然后输入两个城市的名称,并返回它们之间的距离。

1 个答案:

答案 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