2013-08-01 65 views
2

所以這是一個即時通訊使用數組越界,但我不知道爲什麼?

public int[][] MAP = { { 8, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8 }, 
     { 8, 8, 9, 9, 8, 8, 8, 8, 8, 8, 8 }, 
     { 8, 8, 8, 9, 8, 8, 8, 8, 8, 8, 8 }, 
     { 8, 8, 8, 9, 9, 8, 8, 8, 8, 8, 8 }, 
     { 8, 8, 8, 8, 9, 8, 8, 8, 8, 8, 8 }, 
     { 8, 8, 8, 9, 9, 9, 8, 8, 8, 8, 8 }, 
     { 8, 8, 9, 9, 9, 8, 8, 8, 8, 8, 8 }, 
     { 8, 8, 8, 9, 9, 9, 8, 8, 8, 8, 8 }, 
     { 8, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8 }, 
     { 8, 8, 8, 8, 8, 9, 9, 9, 8, 8, 8 }, 
     { 9, 8, 8, 8, 8, 8, 9, 9, 9, 8, 8 }, 
     { 9, 8, 8, 8, 8, 8, 9, 9, 9, 8, 8 }, 
     { 9, 8, 8, 8, 8, 8, 9, 9, 9, 8, 8 }, 
     { 9, 8, 8, 8, 8, 8, 9, 9, 9, 8, 8 }, 
     { 9, 8, 8, 8, 8, 8, 9, 9, 9, 8, 8 } }; 

我的問題了雙陣列是,當我嘗試使用它來加載相應的圖像,我得到一個錯誤說是出界時,Y = 12。

Image[][] displayedMap = new Image[MAP[0].length][MAP.length]; 

    public Town() { 
     System.out.println("Map len" + MAP.length); 
     for (int x = 0; x < MAP[0].length; x++) { 
      for (int y = 0; y < MAP.length; y++) { 
       System.out.println("X:" + x + ",Y:" + y); 
       setImageContent(x, y); 
      } 
     } 
    } 

    private void setImageContent(int x, int y) { 
     Terrain t = Terrain.getTerrainFor(MAP[x][y]); 
     displayedMap[x][y] = t.getImage(); 
    } 

它當y打開至11日在鎮構造函數,然後去,它說

異常在線程 「AWT-EventQueue的 - 0」的setImagecontentjava.lang.ArrayIndexOutOfBoundsException:11

回答

2

你只有11的陣列列的長度,但15上成排的長度你翻轉你的數組引用,而且由於行和列,從而越來越異常不同的長度。

試試這個:

Image[][] displayedMap = new Image[MAP[0].length][MAP.length]; 
public Town() { 
    System.out.println("Map len" + MAP.length); 
    for (int x = 0; x < MAP.length; x++) { 
     for (int y = 0; y < MAP[0].length; y++) { 
      System.out.println("X:" + x + ",Y:" + y); 
      setImageContent(x, y); 
     } 
    } 
} 

private void setImageContent(int x, int y) { 
    Terrain t = Terrain.getTerrainFor(MAP[x][y]); 
    displayedMap[x][y] = t.getImage(); 
} 

通知我使用MAP.length作爲xMAP[0].lengthy現在限制的限制。

你剛剛得到了你的x和y翻轉。 X是行數,Y是列數。

我也建議你退房Tiled。這是一種更容易做這種事情的方式。不需要手動將更多編碼平鋪到源文件中!在一個不錯的程序中編輯它們,然後解析數據文件。有許多不同的格式和解析器。

+0

我將長度設置爲MAP.length,在本例中爲15,所以它將是0-14 – Exikle

+0

正確,但索引是翻轉的。看到我所做的改變? –

+0

謝謝你刪除downvotes誰刪除他們。我很感激。 –

1

這是怎麼displayedMap陣列應創建:

Image[][] displayedMap = new Image[MAP.length][MAP[0].length]; 

在你的代碼中,尺寸反轉。

+1

或者您可以翻轉索引參考。 –

5

你有你的陣列的交換維度,在您使用的「X軸」的尺寸爲Y在您的一部分,反之亦然

0
for (int x = 0; x < MAP.length; x++) { 
    for (int y = 0; y < MAP[0].length; y++) { 

    } 
} 

MAP.length是行數。 MAP[0].length是該行中的列數。

0

我已經使用了雙dimensionnal陣列倒車時x和y的習慣,即由我訪問MAP[y][x]他們:您訪問「線」第一個(內陣列),那麼「列」(項目在內部數組中)。

如果您經常犯這個錯誤,請以「包含更多框的框」爲理由,而不是單個「矩陣」。

相關問題