2014-03-28 5 views
0

나는 매우 혼란스러운 문제를 겪었습니다. 내가 만들고있는이 작은 게임을위한 "덩어리"시스템을 만들기 위해 노력하고 있습니다. 지금 당장하고 싶은 것은 무한대의 먼지 블록을 생성하는 것입니다. 그것은 지금 작동하지만, 난 단지 열 및 흙의 인덱스를 저장하는 2 차원 배열을 사용하고 있습니다. 실제 코드는 다음과 같습니다.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]. 분명히 이것은 내가 원하는 것 ... 내가 뭘 잘못하고있는 걸까요? 도움을 주셔서 감사합니다. ~ 패킷 수신 (나는 명확하지 않고 아무것도 설명하면, 나에게 알려주세요!)

+1

Object의 toString() 메소드를 사용하여 인쇄합니다. java.util.Arrays 패키지에서 아마 Arrays.toString (chunkHolder.get (0)) 메소드를 사용할 수 있습니다.하지만 2D 배열에서는 사용하지 않았습니다. 이 게시물을 확인하십시오 : 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)을 사용하여 첫 번째 요소를 검색하면 2 차원 정수 배열이됩니다. 이러한 것들이 인쇄되면, 당신이 가진 것과 같은 것을 만들어냅니다. 당신은 배열 요소를 원한다면 (당신처럼) , 당신은

  1. 제안으로 사용할 수

  • 가에서 (배열의 요소를 검색 배열 요소를 검색 할 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'의 결과는 정규의 정수 배열이 아닌 2 차원 정수 배열이 될 것입니다. – 2rs2ts

    +0

    나는 약간 심하게 말을했을지도 모른다는 것을 알아 차렸다. 수정 됨. – blueygh2

    +0

    고맙습니다. 내 문제가 해결되었습니다! 나는 여전히 실제 덩어리 작업을해야하지만, 나는 모든 것에 대해 질문을한다면 재미 있지 않을 것이다! 자세한 답변을 주셔서 감사합니다. Java에 대해 더 많이 이해할 수있었습니다. – htmlhigh5