2013-07-12 35 views
0

我想定義一個網格,其中爲網格中的每個點指定一個(x,y)座標。所以我想要做這樣的事情:定義一個數組並傳遞每個點的2個值?

int [][] pt;  
for (x=0; x<numX; x=x+1) { 
    for (y=0; y<numY; y=y+1) { 
    pt[x][y] = {xval, yval}; 
    } 
} 

之所以是因爲我將有序網格的值映射到無序網格。上述代碼當然會導致異常(意外的令牌「{」)。

什麼是最好的方式來做我想做的事情?謝謝。

+0

我不確定您要做什麼。你爲什麼試圖將座標存儲在相同的索引處? xval和yval從哪裏來? –

+0

你必須把[x] [y]中的一個值,這就是爲什麼抱怨,如果你想把一個元組考慮使用另一種數組類型 – nachokk

回答

3

兩件事情:

  • 您還沒有初始化的數組(也許你根本只是didnt放在代碼)
  • 您正在嘗試將兩個值轉換成只有一個可以舉行一個地方。

初始化您的數組像這樣(如果你沒有)

int[][] pt = new int[numX][numY]; 

要存儲陣列中兩個值,您將需要使用的對象。 java Point類將是您可以使用的一個示例

Point[][] pt = new Point[numX][numY]; 
for (x=0; x<numX; x=x+1) { 
    for (y=0; y<numY; y=y+1) { 
     pt[x][y] = new Point(xval, yval);; 
    } 
} 
+0

是的,我只是沒有在初始化時顯示代碼。但我不知道關於點的課程。謝謝,這是一個很好的解決方案! – lynvie

1

你基本上想要在每個數組單元格中存儲固定數量的值嗎? 然後你被限制使用2大案要案:

  1. 使用對象
    Java沒有用戶定義的值類型,所以你不得不使用在堆上全面的對象(有一點希望JVM會非常聰明並優化它,但機會幾乎爲零),無論是數組還是其他任何類。
  2. 如果兩個值都小於64位,可以使用按位算術將它們打包爲內置基元類型(如long)。 (你必須非常小心,這裏

int s爲32位,這樣你就可以在1 long包2 int秒。

+0

這很聰明!但我認爲上面提到的Point類會更強大。 – lynvie

+0

@lynvie速度和內存使用效率都較低。 –

0

pt[x][y] = {xval, yval}是非法的,pt[][]是一個二維數組。它只能存儲一個值。就像這樣pt[x][y] = value

你可以試試java地圖。

相關問題