1

这是我的代码,城市是另一个包含三个 int 变量的类。我试图按照我们老师的指示,但是有这个错误。我不知道为什么会这样。

public class Test {
  private static List<City> cities;

    public static void main(String[] args) {
        readFile("res/data.txt");// TODO code application logic here
    }
    public static void readFile(String filename){
     try {
            Scanner sc = new Scanner(new File(filename));
            cities = new ArrayList<City>();
            while (sc.hasNext()) {
                cities.add(new City(sc.nextInt(),sc.nextInt(),sc.nextInt()));
              sc.close();
            }          
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
4

4 回答 4

1

你必须移动这条线

sc.close();

在while循环之外

public class Test {
  private static List<City> cities;

    public static void main(String[] args) {
        readFile("res/data.txt");// TODO code application logic here
    }
    public static void readFile(String filename){
     try {
            Scanner sc = new Scanner(new File(filename));
            cities = new ArrayList<City>();
            while (sc.hasNext()) {
                cities.add(new City(sc.nextInt(),sc.nextInt(),sc.nextInt()));
            } 
            sc.close();         
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }
于 2020-05-04T01:56:37.360 回答
0

移出 sc.close(); while循环。

于 2020-05-04T03:46:27.533 回答
0

有明显错误。您正在sc.close()循环调用。所以只会读取第一行。你必须sc.close()while循环之后移动。希望能帮助到你

于 2020-05-04T01:56:47.203 回答
0

您的sc.close()调用是循环的最后一条语句。while将其移到}. 但是,如果出现异常,您当前的代码会泄漏文件句柄。情况不妙。最好将close调用移至 finally 块。更好的是,他们补充说,try-with-Resources因为这很麻烦(并且正确处理关闭很困难)。要使用它,它就像

public static void readFile(String filename){
    try (Scanner sc = new Scanner(new File(filename))) {
        cities = new ArrayList<>(); // Diamond Operator
        while (sc.hasNext()) {
            cities.add(new City(sc.nextInt(),sc.nextInt(),sc.nextInt()));
        }          
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
}
于 2020-05-04T01:56:50.957 回答