首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用/使用ArrayList出错

使用/使用ArrayList出错
EN

Stack Overflow用户
提问于 2014-11-05 17:48:11
回答 1查看 277关注 0票数 0

我们正在从一个文件中创建一个ArrayList,它包含整数(计数读数)和双倍(每次填充加仑)。我们用它们来计算里程。然后,我们使用容器类来访问它们,依此类推。

容器看起来如下:

代码语言:javascript
复制
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;
 }

}

我的代码如下所示:

代码语言:javascript
复制
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的索引.当我以当前的形式运行它时,我得到:

代码语言:javascript
复制
lab08.FillUp@3bbf502d

当我删除"while(i+1< )等“导致"i++”的注释时,我得到:

代码语言:javascript
复制
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)

我觉得在第一种情况下,我没有访问数组列表的索引,就像它没有被填充一样。在第二次尝试中,我不太清楚发生了什么。我并不是在寻找直截了当的答案,而是可能只是简单地解释正在发生的事情,并对需要发生的事情做一些简单的说明。我也喜欢关于正在发生的事情的信息,所以如果有人能把我推到一些阅读材料上,那就太棒了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-05 17:56:57

每次调用fillUpArray(scan)时,都会得到不同的ArrayList,其大小可能与以前调用该方法时的大小完全不同。应该调用该方法一次,并将其输出存储在变量中,以便使用相同的列表。

代码语言:javascript
复制
        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++;
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26763761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档