【发布时间】:2014-11-05 17:48:11
【问题描述】:
我们正在从一个文件中创建一个ArrayList,其中包含整数(里程表读数)和双精度数(每次加注的加仑数)。我们正在使用它们来增加里程。然后我们使用容器类来访问它们,依此类推。
容器如下所示:
package lab08;
public class FillUp{
private final int odometer;
private final double gallons;
public FillUp(int givenOdometer, double givenGallons){
odometer = givenOdometer;
gallons = givenGallons;
}
public int getOdometer(){
return odometer;
}
public double getGallons(){
return gallons;
}
}
我的代码如下所示:
public class MileageCalculator {
public static void main(String[] args) throws FileNotFoundException{
Scanner scan = new Scanner(new File("/Users/Mobile_Hive/Desktop/Homework/mileage.txt"));
double mileage=0.0;
int i=0;
System.out.println(fillUpArray(scan).get(0));
/**
while(i+1<fillUpArray(scan).size()){
mileage=(((FillUp)fillUpArray(scan).get(i+1)).getOdometer()-((FillUp) fillUpArray(scan).get(i)).getOdometer())/((FillUp) fillUpArray(scan).get(i+1)).getGallons();
System.out.println("Mileage: "+mileage);
i++;
}
**/
}
private static ArrayList<FillUp> fillUpArray(Scanner scan){
ArrayList<FillUp> list = new ArrayList<FillUp>();
int odometer=0;
double gallons=0.0;
while(scan.hasNextLine()){
String line = scan.nextLine();
Scanner scans = new Scanner(line);
while(scans.hasNext()){
odometer=scans.nextInt();
gallons=scans.nextDouble();
}
FillUp fill = new FillUp(odometer, gallons);
list.add(fill);
}
return list;
}
我正在使用 cmets 来屏蔽我的方法来获取实际里程计算并尝试查看我是否可以访问我尝试创建的 ArrayList 的索引...... 当我以当前形式运行它时,我得到:
lab08.FillUp@3bbf502d
当我删除导致“i++”的“while(i+1
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:635)
at java.util.ArrayList.get(ArrayList.java:411)
at lab08.MileageCalculator.main(MileageCalculator.java:15)
我觉得在第一种情况下,我没有访问数组列表的索引,几乎就像它没有被填充一样。在第二次尝试中,我不太确定发生了什么。 我不是在寻找直截了当的答案,而只是用非常精简的指令来解释正在发生的事情。我也很想了解正在发生的事情,所以如果有人能把我推到一些很棒的阅读材料上。
【问题讨论】:
-
在 FillUp 类中覆盖 toString。
-
是的,您正在打印列表的第一个元素,即
FillUp。但是您没有在FillUp类中覆盖toString(),这就是为什么您会得到这样的输出...对于您的循环,获取ArrayListonce 而不是调用@ 987654330@ 在您的循环中。