2012-01-27 176 views
1

我有這樣的代碼:Java數組傳遞通過引用

public static int MAX; 
public static int MIN; 


public static void startGame(){ 

    MIN = -1; 

    MAX = 1; 

    int[] randomGridVals = new int[ROWS*COLUMNS]; 

    fill(randomGridVals); 

    System.out.println(Arrays.toString(randomGridVals)); 

    <MORE CODE> 
} 

private static void fill(int[] randomGridVals) { 

    for(int i = 0 ; i < randomGridVals.length; i++) 
    { 
     int rnd = MIN + (int)(Math.random() * ((MAX - MIN) + 1)); 

     randomGridVals[i] = rnd; 
    } 

} 

我想到的是,數組通過引用傳遞和陣列有它的隨機值然而,當我嘗試打印其空。這是爲什麼發生?

+0

「空」,因爲在沒有條目? – 2012-01-27 23:47:49

+0

yes打印[] – Cemre 2012-01-27 23:48:31

+0

MIN和MAX的值是多少? – 2012-01-27 23:48:36

回答

4

很難從您提供的代碼中肯定地說。我會檢查ROWS*COLUMNS的值。這可能是0,因此您創建一個0大小的數組。

+0

我相信這些常量是好的,因爲我使用它們來構建網格。 – Cemre 2012-01-27 23:52:38

+2

由於代碼打印[],這證明ROWS * COLUMNS = 0. – user949300 2012-01-27 23:54:24

+2

@Cemre - 您何時設置ROWS和COLUMNS。他們真的應該被設置爲聲明,因爲它們都是大寫,這意味着「靜態最終」。我的猜測是你在運行這個例程之後設置它們。 – user949300 2012-01-27 23:55:56

1

你在哪裏定義ROWS和COLUMNS?至少它們中的一個必須等​​於0,將數據結構呈現爲int [0]。

由於int是原始類型,您的數組開始填充0。由於數組無法調整大小,並且Arrays.toString將打印每個單元格(它不會僅僅跳過0- 0通常在int[]中非常重要,例如!),則此結果不能是數組的非工件正在寫入。它必須初始化爲0,這意味着ROWS * COLUMNS == 0。檢查ROWS,COLUMNS的值,以及它們的類型 - 除int以外的令人驚訝的類型可能會導致這種情況,但0更有可能。