如何创建2D数组的ArrayList

时间:2014-03-28 15:37:56

标签: java arrays arraylist

我遇到了一个非常令人不安的问题。我试图创建一个" chunking"这个小游戏的制作我正在制作。我现在想要做的只是生成无数块污垢块。它现在可以工作,但我只是使用二维数组,它存储列和污垢的索引。这是实际的代码:

public void generate(){
    int newMax = dirtCount + dirtGeneratorChunk;
    int oldCount = dirtCount;
    for(int i = oldCount;i<newMax;i++){
        dirt[dirtCount] = newDirt(spawnDirtX+column*16,
                    spawnDirtY,16,16,column,columnNumber);
        columnNumber ++;
        blockGrid[column][columnNumber] = spawnDirtY;
        updateBlockGrid(column,(spawnDirtY-spawnDirtTop)/16,spawnDirtY);
        dirtX[i] = spawnDirtX+column*16;
        dirtY[i] = spawnDirtY;
        hasDirt = true;
        dirtCount ++;
        spawnDirtY += 16;
        if(spawnDirtY>500){
            column++;
            columnNumber = 0;
            spawnDirtY = spawnDirtYOriginal;
        }
    }
    repaint();
}

希望这有助于展示我尝试做的事情。我确信您可以通过代码来判断,我对Java很新,可能正在使用不良做法/效率低下的方法。如果您对如何改进我的编程有任何建议,我很乐意听到它们!回到关键点。这是我到目前为止在ArrayList上的内容:

//Construct a new empty ArrayList for type int[][]
    ArrayList<int[][]> chunkHolder = new ArrayList<int[][]>();
    //Fill ArrayList (index, int[][])
    chunkHolder.add(chunkCount, createBlockGrid());
    chunkCount ++;
    Object[] chunkArray = chunkHolder.toArray();
    System.out.println(chunkArray[0]);

    public static int[][] createBlockGrid(){
        int[][] blockGrid = new int[64][256];
        return blockGrid;
    }

当我尝试使用System.out.println(chunkHolder.get(0));时,它会返回:[[I@337838。显然这不是我想要的......我做错了什么? 感谢大家的帮助! 〜Guad (如果我不清楚地解释了什么,请告诉我!)

1 个答案:

答案 0 :(得分:3)

您的ArrayList包含int [] []元素,即二维整数数组。 通过使用chunkHolder.get(0)检索第一个元素,您将获得一个二维整数数组。这些东西,如果印刷,产生的东西就像你得到的东西。 如果你想要数组元素,你可以

  1. 检索数组元素(就像你做的那样)
  2. 检索数组的元素
  3. 根据建议,您可能希望使用(来自Java 5)Arrays.deepToString(arr):

    System.out.println(Arrays.deepToString(chunkHolder.get(0)));
    

    否则,您可以遍历数组以将其打印出来。 例如:

    int[][] a = chunkHolder.get(0);
    for (int[] b : a) {
     for (int c : b) {
      System.out.print(c + " ");
     }
     System.out.println();
    }