0
public class table 
{
private int raw=0;
private int column=0;
private List<ArrayList<Integer>> TABLE ;
private static int COUNT_ELEMENTS_IN_RAW=0;
private static int COUNT_ELEMENTS_TOTAL=0;
private List<Integer> singleRaw ;
public table()
{
    TABLE = new ArrayList<ArrayList<Integer>>();
    singleRaw = new ArrayList<Integer>();
}
public void addELEMENT(Integer value)
{   
    if(!TABLE.equals(null))
    {

        singleRaw.addAll(TABLE.get(raw));
        singleRaw.add(value);
        COUNT_ELEMENTS_IN_RAW++;
        if(COUNT_ELEMENTS_IN_RAW%14==0)
        {
            raw++;
            COUNT_ELEMENTS_IN_RAW=0;
            COUNT_ELEMENTS_TOTAL++;
        }
    }
}
}

这里我试图模拟二维表(xy),函数 addELEMENT 执行插入“表”。任何人都可以解释我为什么给我这个错误?

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at pt.iul.poo.games.table.addELEMENT(table.java:27)
4

3 回答 3

2

你见过Guava包含的集合类型吗? Table,它支持任何“行”类型和“列”类型的用例。

Table<Integer, Integer, String> table = HashBasedTable.create();
table.put(0, 0, "A"); // row 0, column 0
table.put(0, 1, "B"); // row 0, column 1

// One element
final String value = table.get(0, 1); // "B"

// Column 0
final Collection<String> strs = table.column(0).values();

// Row 1
final Collection<String> strs = table.row(1).values(); 
于 2013-05-21T18:45:52.773 回答
1

您的问题出在这一行:

singleRaw.addAll(TABLE.get(raw));
                 ^^^^^^

您得到的异常信息非常丰富:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

它告诉你Listis 的大小为 0,你正在尝试TABLE.get(raw));whereraw为 0,但如果TABLE大小为 0,则无法在 0 处获取元素。你确实有一个List但它是的,你没有插入任何事情。

您还应该更改if(!TABLE.equals(null))if(TABLE != null),因为如果TABLEnull,这将引发NPE,因为它将被评估为!null.equals(null)

另外,请尝试遵循Java 命名约定并将TABLE表更改为Table.

于 2013-05-21T18:37:41.767 回答
1

看线:

singleRaw.addAll(TABLE.get(raw));

有一个例外是因为

TABLE.get(raw)

TABLE 为空,因此无法获取索引 0

于 2013-05-21T18:40:24.663 回答