数组列表<列表<C>>异常



有人可以告诉我我做错了什么,因为我有这个错误:

线程中的异常" main" java.lang.indexoutofboundsexception:index: 0,大小:0 java.util.arraylist.rangecheck(arraylist.java:653)at java.util.arraylist.get(arraylist.java:429)at javaapplication4.javaapplication4.main(javaapplication4.java:41)

    ArrayList<List<Cartas>> tabuleiro = new ArrayList<>();
    ArrayList <Integer> pos = new ArrayList<>();
    pos.add(40);pos.add(50);pos.add(60);pos.add(31);pos.add(41);pos.add(22);pos.add(32);pos.add(42);pos.add(13);pos.add(23);pos.add(33);pos.add(24);pos.add(34);
        for(int x=0; x<9; x++){
            for(int y=0; y<7; y++){
                for (Integer p : pos) {
                    if (p == (x*10+y)) {
                        tabuleiro.get(x).set(y, new Cartas(x,y,false));
                    }
                }
            }
        }
        for(int x=0; x<9; x++){
            for(int y=0; y<7; y++){
                System.out.println(tabuleiro.get(x).get(y).nomeCV);
            }
        }

创建一个包含" C"对象的2D arraylist,然后您可以实例化2D列表,例如:

C obj = new C(); //Creates a "C" object
ArrayList<ArrayList<C>> myArray = new ArrayList<ArrayList<C>>(); //Creates a 2 Dimensional ArrayList
myArray.add(new ArrayList<C>); //Adds an ArrayList<C> to the the 2D ArrayList
myArray.get(0).add(obj); //Adds a "C" object to the ArrayList that was added on the previous line

为了更好地理解阵列列表,请参阅此链接

在arraylist中创建一个arraylist:

ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();

(注意,list此时没有任何内容)然后,您在list中创建一个新的arraylist:

list.add(new ArrayList<String>);

然后:

list.get(0).add("Hello);

list'S 0th index

上添加字符串

您可以使用guava表

Table<Integer, Integer, YourClassC> table = HashBasedTable.create();
table.put(0, 8, new YourClassC());
table.put(1, 3, new YourClassC());
table.put(2, 2, new YourClassC());
...
table.get(0, 0); // returns null
table.get(0, 8); // returns first instance of YourClassC

我不确定我是否理解您的问题,因为您似乎回答了自己。答案取决于您要如何将元素插入其中以及如何阅读它们。

这是我到目前为止能想到的一些方法,没有更多信息,我将无法选择:

  • 使用二维数组C[][],该阵列可能包含无效值。该解决方案需要从一开始就知道数组的大小。

  • 使用 ArrayList<ArrayList<C>>,其中根列表是行列表,每行可能包含空项目和C对象。您可以根据需要添加更多行,并根据需要在线路上添加更多元素。

  • 使用2 ArrayList<List<C>>,其中第一个是行列表,第二个是列列表。行和列将共享相同的对象,但根本不需要包含任何零值:每行只是行中包含的非零对象的列表,每列都相同。

    最后一个解决方案不容易操纵,但是如果您的矩阵确实很少,则有效的内存效率要高得多(包含很少的对象,但很多行和列)。

最新更新