Передача Java Array по ссылке - PullRequest
1 голос
/ 28 января 2012

У меня есть этот код:

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;
    }

}

Я ожидаю, что массив передается по ссылке и массив имеет случайные значения в нем, однако, когда я пытаюсь напечатать его пустым.Почему это происходит?

Ответы [ 3 ]

4 голосов
/ 28 января 2012

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

2 голосов
/ 28 января 2012

Java - это , никогда не передавайте по ссылке . Всегда передается по значению .

Что касается пустоты, пожалуйста, оставьте ROWS и COLUMNS или отметьте их.

1 голос
/ 28 января 2012

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

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

...