Я не новичок в Java, но и не эксперт, поэтому я публикую это для помощи/объяснения. Я искал во многих местах в Интернете, и там не было ответа, который я ищу.
public class Driver {
public static ArrayList<ArrayList<Integer>> theData; // ArrayList to store the ArrayList of values
final static int dataSize = 20; // length of the line of data in the inFile
/***
* Read in the data from the inFile. Store the current line of values
* in a temporary arraylist, then add that arraylist to theData, then
* finally clear the temporary arraylist, and go to the next line of
* data.
*
* @param inFile
*/
public static void getData(Scanner inFile) {
ArrayList<Integer> tempArray = new ArrayList<Integer>();
int tempInt = 0;
while (inFile.hasNext()) {
for (int i = 0; i < dataSize; i++) {
tempInt = inFile.nextInt();
tempArray.add(tempInt);
}
theData.add(tempArray);
tempArray.clear();
}
}
/**
* @param args
*/
public static void main(String[] args) {
Scanner inFile = null;
theData = new ArrayList<ArrayList<Integer>>();
System.out.println("BEGIN EXECUTION");
try {
inFile = new Scanner(new File("zin.txt"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
getData(inFile);
}
System.out.println(theData.get(5).get(5)); // IndexOutOfBoundsException here
System.out.println("END EXECUTION");
}
}
Я получаю исключение IndexOutOfBoundsException, где я его помечаю. Интересно то, что когда я пытался понять это, я проверил, правильно ли работает метод getData
, поэтому, поскольку метод повторялся в цикле while в getData
, я распечатал размер массива-theData
, И размер массивов в массиве theData
, и что вы знаете, он вернул правильный размер и значение. Таким образом, в основном, когда вызывается getData
, он работает правильно и сохраняет значения, но когда я пытаюсь вызвать значения в Main
, в ArrayList нет значений.
У меня есть ощущение, что это как-то связано с тем, что я очищаю tempArray
, который я добавлял к theData
. Любая помощь будет здорово!
Спасибо