2014-03-28 51 views
0

我遇到了一个非常令人不安的问题。我正在尝试为我制作的这款小游戏创建一个“chunking”系统。我现在想要做的就是生成无数块污垢块。它现在工作,但我只是使用一个二维数组,它存储的列和污垢的索引。这里是实际的代码:如何创建2D阵列ArrayList

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));,它返回:[[[email protected]。显然这不是我想要的......我做错了什么? 谢谢大家的帮助! 〜Guad (如果我没有解释清楚,请告诉我!)

+1

它使用Object的toString()方法进行打印。您可以使用java.util.Arrays包中的Arrays.toString(chunkHolder.get(0))方法,尽管我从未在二维数组上使用它。看看这篇文章:http://stackoverflow.com/questions/409784/simplest-way-to-print-an-array-in-java –

+0

'int [] [] firstChunk = chunkHolder.get(0);'现在您可以像平常一样与'firstChunk'进行交互。尝试'System.out.println(firstChunk [0] [0]);'例如。此外,尝试在初始化后打印'blockGrid',您会看到为什么会得到该表示 - 这正是打印数组的原因。 – 2rs2ts

回答

3

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

  1. 检索数组元素(像你这样)
  2. 检索数组的元素

如所建议的,你可能需要使用(从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(); 
} 
+0

'get'的结果将是一个二维整数数组,而不是一个常规整数数组。 – 2rs2ts

+0

我注意到它可能有点措辞不良。纠正。 – blueygh2

+0

谢谢,这解决了我的问题!我仍然需要得到实际的组块,但如果我对所有问题都提出问题,这将不会很有趣!感谢您的详细解答,它帮助我更多地了解了Java! – htmlhigh5