2014-02-14 50 views
0

我做了tileList.size()System.out.println和它返回成千上萬的int迅速上升隨着時間的推移。我正在做一個Java applet,它創建tile併爲ArrayList中的每個點隨機生成對象變量。我的ArrayList是增加成千上萬個對象本身

我不知道爲什麼會這樣,但我可以定期清除數組列表,但我不應該。

col = 20; 
row = 10; 

public void createTiles() 
{ 
    for (int i = 0; i <= col; i++) 
    { 
     for (int j = 0; j <= row; j++) 
     { 
      if (r.nextInt(100) >= slides/2) 
      { 
       tileList.add(new Tile(i * 64, j * 64, this.getHeight(), this.getWidth(), false, 0, false)); 
      } 

      if (r.nextInt(100) <= slides/2) 
      { 
       tileList.add(new Tile(i * 64, j * 64, this.getHeight(), this.getWidth(), true, 0, false)); 
      } 

      if (r.nextInt(500) <= 1) 
      { 
       tileList.add(new Tile(i * 64, j * 64, this.getHeight(), this.getWidth(), false, 0, true)); 
      } 
     } 
    } 
} 

在那裏被從

public void paint(Graphics g) 
{ 
    createTiles(); 

    generatePanel(); 
    createSnowballs(); 
    createFish(); 
    penguinCollision(); 

    drawTiles(g); 

    bearAI(); 
    bearCollision(); 
    drawSnowballs(g); 
    drawFish(g); 
    drawPenguin(g); 
    drawHunger(g); 
    drawHungerBar(g); 
    drawBear(g); 


    if (hungerAmount <= 0) 
     drawGameover(g); 
} 
+2

你不需要空的'else'塊。你可以把這些留下。 – user2357112

+0

你打電話給這個/你在哪裏?我懷疑你的調用方法被稱爲很多。堅持一個斷點,並通過...追蹤它的使用... –

+0

它是從我的繪畫方法調用,這是爲什麼? – user1920076

回答

3

稱爲在java Applet's Paint方法被稱爲無限的次數,以提供用戶的一致的用戶界面,只是嘗試它通過添加的System.out.println()內部油漆, 因此,請避免在Paint內調用這些方法。

+0

我應該在哪裏調用這些方法?我正在做一個小程序,所以沒有主要的方法。 – user1920076

+0

是否需要僅調用一次createtiles()方法,然後將其添加到init(),否則使用某個標誌來決定何時調用。 –

0

它看起來像的TileList是你的類的成員,當你調用createTiles()添加瓷磚到此列表中。如果多次調用createTiles(),Tiles將添加多次。我認爲你sholud把

的TileList =新的ArrayList();

tileList.clear();

在你createTiles的第一行()方法來重新初始化或清除。

0

您應該從init()create()方法調用createTiles()方法。你的列表包含非常大量的tile,因爲在applet中,paint()方法一直被調用。你也不應該重寫paint()方法。在基於swing的程序中,建議您改用paintComponent()方法。

小程序年紀大了,他們不會在未來的Java版本的支持。我建議切換到應用程序。

+0

那麼Jframe會是更好的替代路線嗎? – user1920076

+0

@ user1920076是的。 –

相關問題