Мы создаем файл 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, которые я пытался сделать .... Когда я запускаю это в своей текущей форме, я получаю :
[email protected]
Когда я удаляю комментарии вокруг «в то время как (я + 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)
Я чувствую, как в первом случае, я не доступ к индексу списка массивов, почти так же, как он не был заполнен. Во второй попытке я не совсем уверен, что происходит. Я не ищу прямых ответов, но, возможно, просто объясню, что происходит с очень урезанными инструкциями о том, что должно произойти. Я также хотел бы получить информацию о том, что происходит, если кто-то может подтолкнуть меня к некоторому материалу для чтения, который был бы потрясающим.
Переопределить toString в классе FillUp. – user2336315
Да, вы печатаете первый элемент списка, который является «FillUp». Но вы не переопределили 'toString()' в классе 'FillUp', поэтому вы получаете такой вывод ... Для вашего цикла получите' ArrayList' * один раз * вместо вызова 'fillUpArray' в ваш цикл. –