我们正在从一个文件中创建一个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;
}我正在使用这些注释来屏蔽我的实际里程计算方法,并试图查看是否可以访问我试图创建的ArrayList的索引.当我以当前的形式运行它时,我得到:
lab08.FillUp@3bbf502d当我删除"while(i+1< )等“导致"i++”的注释时,我得到:
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)我觉得在第一种情况下,我没有访问数组列表的索引,就像它没有被填充一样。在第二次尝试中,我不太清楚发生了什么。我并不是在寻找直截了当的答案,而是可能只是简单地解释正在发生的事情,并对需要发生的事情做一些简单的说明。我也喜欢关于正在发生的事情的信息,所以如果有人能把我推到一些阅读材料上,那就太棒了。
发布于 2014-11-05 17:56:57
每次调用fillUpArray(scan)时,都会得到不同的ArrayList,其大小可能与以前调用该方法时的大小完全不同。应该调用该方法一次,并将其输出存储在变量中,以便使用相同的列表。
List list = fillUpArray(scan);
System.out.println(list.get(0));
while(i+1<list.size()){
mileage=(((FillUp)list.get(i+1)).getOdometer()-((FillUp) list.get(i)).getOdometer())/((FillUp) list.get(i+1)).getGallons();
System.out.println("Mileage: "+mileage);
i++;
}https://stackoverflow.com/questions/26763761
复制相似问题