/使用ArrayList时出错

时间:2014-11-05 17:48:12

标签: java arraylist

我们正在从文件创建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

当我删除&#34; while(i + 1&lt;)etc&#34;导致&#34; i ++&#34;我明白了:

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)

我觉得在第一种情况下,我没有访问数组列表的索引,几乎就像它没有被填充一样。在第二次尝试中,我不太确定发生了什么。 我不是在寻找直截了当的答案,而是可能只是解释在发生什么需要发生的非常简单的指示上发生了什么。我也很喜欢有关正在发生的事情的信息,所以如果有人能够推动我阅读一些非常棒的阅读材料。

1 个答案:

答案 0 :(得分:1)

每次拨打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++;
        }