如何创建不等深度的数组数组,仅保持整数(Android)

时间:2013-01-29 21:19:25

标签: multidimensional-array arraylist

如何创建如下所示的数组:

[[1,2,[[3,3,3,3,3],[4,4,4,4,4]],[15,20],35,[2,1]],
 [2,2,[[6,6,6,6,6],[1,2,3,4,5]],[30,15],45,[2,1]],
 [2,2,[[6,6,6,6,6],[1,2,3,4,5]],[30,15],45,[2,1]],
 [2,2,[[6,6,6,6,6],[1,2,3,4,5]],[30,15],45,[2,1]],
 ...]

所以是一个4维数组,仅保存整数值,数组位于数组内,但深度不等。

[编辑] 使用命名元素我会得到这个声明:

// containerarray spelersSpel:
private ArrayList<ArrayList<ArrayList<ArrayList<Integer>>>> spelersSpel_ = new ArrayList<ArrayList<ArrayList<ArrayList<Integer>>>>();

// holding:
// first-level element of spelersSpel:
private ArrayList<ArrayList<ArrayList<Integer>>> spelerSpel = new ArrayList<ArrayList<ArrayList<Integer>>>();

// holding:

// first element of spelerSpel:
private int spelerNummer;

// second element of spelerSpel:
private int spelerBeurtNummer;

// third element of spelerSpel:
private ArrayList<ArrayList<Integer>>spelerBeurtenWorpenScore = new ArrayList<ArrayList<Integer>>();
// holding:
private ArrayList<Integer>spelerBeurtWorpenScore = new ArrayList<Integer>();
// holding:
private int spelerBeurtWorpScore;

// fourth element of spelerSpel:
private ArrayList<Integer>spelerBeurtenTotaal = new ArrayList<Integer>();

// fifth element of spelerSpel:
private ArrayList<Integer>spelerBanen = new ArrayList<Integer>();
// holding:
private int spelerBaan;

并将值放入其中:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    spelerBaan = 2;
    spelerBanen.add(spelerBaan);
    spelerSpel.add(spelerBanen);

然而,我仍然遇到问题,在最后一行,将数组spelerBanen添加到spelerSpel,因为spelerSpel期望现在每个(第一级)元素都是二维数组,而spelerBanen则不是。怎么解决?我可以考虑使用虚拟占位符,比如

ArrayList<ArrayList<Integer>>dummy = new ArrayList<ArrayList<Integer>>();
dummy.add(spelerBanen);         
spelerSpel.add(dummy);

但这对我来说似乎也不是一个很好的解决方案吗?

[编辑] 我的想法是将spelerSpel的声明更改为:

private ArrayList<ArrayList<ArrayList<Integer>>> spelerSpel = new ArrayList<ArrayList<ArrayList<Integer>>>(5);

所以'固定'长度为5.然后:

spelerBaan = 2;
spelerBanen.set(0, spelerBaan);
spelerSpel.get(0).set(0,spelerBanen);
spelersSpel.add(spelerSpel);

我仍然会遇到一个持有大量“虚拟”值的数组,但我无法弄清楚如何做得更好。

1 个答案:

答案 0 :(得分:1)

尝试下面的代码示例4D数组和显示所有值的主要方法。

public class SampleClass {
    static final int arrays[][][][] = {
            { { { 0, 2528 }, { 12, 25 }, { 25, 258 } },
                    { { 25, 345 }, { 345, 345 } } },
            { { { 4654, 234234 }, { 23434, 852 } },
                    { { 7897, 56345 }, { 3422, 57 }, { 98889, 234234 } } },
            { { { 545, 45645 }, { 45645, 3232 }, { 5252, 65465 } },
                    { { 45645, 234234 }, { 6451, 68678 } } },
            {
                    { { 789798, 34234 }, { 234234, 23423 } },
                    { { 23423, 234234 }, { 345345, 456456 }, { 5757, 800000 } },

            } };

    public static void main(String[] args) {
        for (int i = 0; i < arrays.length; i++) {
            for (int j = 0; j < arrays[i].length; j++) {
                for (int k = 0; k < arrays[i][j].length; k++) {
                    for (int l = 0; l < arrays[i][j][k].length; l++) {

                        System.out.println(arrays[i][j][k][l]);
                    }
                }
            }
        }
    }
}