【问题标题】:Invoking method in another class and storing the returned list调用另一个类中的方法并存储返回的列表
【发布时间】:2017-09-11 16:27:54
【问题描述】:

正如标题所说,我正在尝试从名为 Hill 的类调用下面的方法到我的公共类,我还想将返回列表存储在本地列表中。

 public static List<Hill> readHills() {

    String destination = "****";

    List<Hill> hill = new ArrayList<>();


    try {
        BufferedReader br = new BufferedReader(new FileReader(new File(destination)));
        String fileContents = "";
        int line = 0;

        while ((fileContents = br.readLine()) != null) {
            if (line == 0) {
                line++;
                continue;
            } else {
                String[] entries = fileContents.split(",");
                Hill placeholder = new Hill(Integer.parseInt(entries[0]), entries[1], entries[2], Double.parseDouble(entries[4]), Double.parseDouble(entries[5]), Double.parseDouble(entries[6]));
                hill.add(placeholder);
                line++;
            }
        }
    }

    catch(FileNotFoundException fnfe) {
        System.out.println("Unable to find file");
    }

    catch(IOException e) {
        System.out.println("Error");
    }
    return hill;
}

这是我试图调用上述方法的方法

public static void exercise5b() {
    Hill mylist = new Hill();
    //List<Integer> mylist = Hill.readHills();
}

但是,在执行此操作时,我在 Hill() 上遇到错误;声明 Hill 不能在 Hill() 中应用。下面的代码还显示了我的 Hill 类包含的内容

class Hill {

public int number;
public String name;
public String county;
public double height;
public double latitude;
public double longitude;

Hill (int number, String name, String county, double height, double latitude, double longitude){
    this.number = number;
    this.name = name;
    this.county = county;
    this.height = height;
    this.latitude = latitude;
    this.longitude = longitude;
}

【问题讨论】:

  • 您已覆盖默认构造函数,因此在构造对象时必须为“Hill”构造函数提供参数。或者,您可以创建一个没有任何参数的构造函数,然后它将是有效的。

标签: java arrays list class


【解决方案1】:

你必须创建一个没有任何参数的构造函数:

public Hill() {
}

或者你应该将所有参数传递给你的构造函数。

所以你可以创建一个 Hill 类的对象并调用你的方法:

Hill mylist = new Hill();
List<Hill> list = mylist.readHills();
  1. 您的方法返回的是 Hill 对象而不是整数
  2. 您不能使用与您的对象相同的名称来命名您的列表
  3. 因为你在你的方法中设置静态你可以这样调用它List&lt;Hill&gt; list = Hill.readHills();,你不需要创建一个希尔类型的对象

编辑

另一个问题,我认为您的索引在这里不正确:

Hill 占位符 = new Hill(Integer.parseInt(entries[0]), entries[1], 条目[2],Double.parseDouble(条目[4]),Double.parseDouble(条目[5]), //----------------^------------------^ Double.parseDouble(entry[6]));

java.lang.ArrayIndexOutOfBoundsException: 6 当您的数组不包含此索引时会发生错误。

【讨论】:

  • 啊,好吧,这有点改变我的问题,是否可以在不传递构造函数的情况下返回 readHills() 中的列表,因为我没有所有参数说清单。
  • 刚刚看到你的编辑说它可能并实现了它,但是在线程“main”java.lang.ArrayIndexOutOfBoundsException:6
  • @beeman 这是另一个问题,但我认为你犯了一个小错误检查我的编辑我会告诉你在哪里
猜你喜欢
  • 2022-11-13
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多