正如标题所说,我正在尝试从名为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。下面的代码还显示了我的班级希尔所包含的内容
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;
}
最佳答案
您必须创建一个没有任何参数的构造函数:
public Hill() {
}
或者,您应该将所有参数传递给构造函数。
因此,您可以创建Hill类的Object并调用您的方法:
Hill mylist = new Hill();
List<Hill> list = mylist.readHills();
您的方法返回Hill对象而不是Integer
您不能使用与对象相同的名称来命名列表
因为您要在方法中设置静态值,所以可以像
List<Hill> list = Hill.readHills();
这样调用它,因此无需创建Hill类型的Object编辑
另一个问题,我认为您的索引在这里不正确:
Hill占位符=新Hill(Integer.parseInt(entries [0]),条目[1],
entry [2],Double.parseDouble(entries [4]),Double.parseDouble(entries [5]),
// -------------- ^ ------------------------------ ^
Double.parseDouble(entries [6]));
当您的数组不包含此索引时,发生
java.lang.ArrayIndexOutOfBoundsException: 6
错误。