2012-01-27 127 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更有可能。