0
public class DataStorage implements java.io.Serializable {
private static final long serialVersionUID = -5597052819894601310L;
private ArrayList<ArrayList<String>> array = new ArrayList<>();
private Map<String, String[]> nameMap;
private int index = 0;

DataStorage() {
    array.add(index, new ArrayList<String>());
}
public void addDataToRow() {
    index += 1;
    array.add(index, new ArrayList<String>());
    array.get(index).add(new String());
}

public void addDataToColumn(int pos, String data) {
    array.get(index).add(pos, data);
}

public int rowSize() {
    return array.size();
}

public int colSize() {
    return array.get(index).size();
}

public String initNameMap() {
    nameMap = new TreeMap<>();
    String out = "";
    for(int i = 2; i < array.size(); i++) {
        String[] infoHolder = new String[40];
        String name = array.get(i).get(2);
        int index = 0;
        for(int w = 3; w < array.get(i).size(); w++) {
            System.out.println(index);
            infoHolder[index] = array.get(i).get(w);
            index++;
        }
        nameMap.put(name, infoHolder);
    }

    for(String x : nameMap.keySet()) out += x + "\n";
    return out;

}

public String navigateArray(int rStart, int cStart) {
    String out = "";
    for(int i = rStart; i < array.size(); i++) {
        for(int w = cStart; w < array.get(i).size(); w++) {
            out += array.get(i).get(w) + " ";
        }
        out += "\n";
    }
    return out;
}

}

所以这就是正在发生的事情。我有这个问题中包含的课程。我创建了这个类的对象,并用来自文件的信息填充了这个类中的 ArrayList,然后我序列化了这个对象。后来,我添加了 initNameMap() 方法,并添加了一个初始化为 TreeMap 的 Map。现在,我已经反序列化了我之前序列化的对象,并且可以检索其中的信息,但是当我调用 initNameMap() 方法时,它给了我以下异常:

java.lang.IndexOutOfBoundsException: Index: 2, Size: 1 在这段代码:

String name = array.get(i).get(2);

和这段代码中的 java.lang.NullPointerException :

nameMap.put(name, infoHolder);

我根本不明白为什么会这样。这对我来说非常令人困惑,特别是 indexoutofbounds 异常。谁能给我解释一下?它与序列化有什么关系吗?谢谢

4

1 回答 1

0
array.get(i).get(2);

嵌套的 ArrayList 在

array

大小为 1,因此当您尝试获取第二个元素(不存在)时,您将获得 OutOfBoundsException。

name

结果将为空。您需要弄清楚为什么数组中的嵌套 ArrayList 没有预期的两个元素。

于 2013-04-28T03:10:03.037 回答