2012-01-27 3 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

«Пустой», как в отсутствии записей ??? –

+0

yes it prints [] – Cemre

+0

Каковы значения MIN и MAX? –

ответ

4

Трудно сказать наверняка из кода, который вы предоставили. Я бы проверил значение ROWS*COLUMNS. Вероятно, это 0, и поэтому вы создаете массив размером 0.

+0

Я уверен, что константы прекрасны, так как я использую их для построения сетки. – Cemre

+2

Поскольку код печатает [], это доказательство того, что ROWS * COLUMNS = 0. – user949300

+2

@Cemre - когда вы устанавливаете ROWS и COLUMNS. Они действительно должны быть объявлены, так как все они являются шапками, а это означает «статический окончательный». Я предполагаю, что вы установили их после выполнения этой процедуры. – user949300

1

Где вы определяете ROWS и COLUMNS? По крайней мере, один из них должен равняться 0, делая вашу структуру данных int [0].

С int является примитивным типом, ваш массив начинается с 0s. Поскольку массивы не могут быть изменены, а Arrays.toString будет печатать каждую ячейку (она не будет просто пропускать 0s-0, как правило, очень важна в int[], с одной стороны!), Этот результат не может быть артефактом вашего массива, а не записывается в. Он должен быть инициализирован длиной 0, а это значит, что ROWS * COLUMNS == 0. Проверьте значение ROWS, COLUMNS, а также их типы - удивительные типы, отличные от int, могут в редких случаях вызывать это, но скорее всего.

Смежные вопросы