java-метод для изменения значения массива в null

Вопрос:public void setData(double[] d) { if (d == null) { data = new.html double[0]; } else { data = new.html double[d.length]; for (int i = 0; i < d.length; i++) data[i] = d[i]; } } этот метод в моем коде используется для установки данных массива. Мне также требуется написать метод с именем reset(), который изменяет

Вопрос:public void setData(double[] d) { if (d == null) { data = new double[0]; } else { data = new double[d.length]; for (int i = 0; i < d.length; i++) data[i] = d[i]; } }

этот метод в моем коде используется для установки данных массива. Мне также требуется написать метод с именем reset(), который изменяет заданный массив на нулевое значение. Кроме того, мы практикуем перегрузку в этой лаборатории. Существует четыре версии setData() (double, int, float, long). Поскольку двойной массив используется внутри класса Stat для хранения значений, мне нужно только сделать один метод reset() типа double? (Я думаю, мне нужен только один…) Наконец, пожалуйста, дайте мне несколько советов, как перейдя к этой операции сброса, потому что все, что я пробовал, потерпело неудачу и обычно состоит из таких утверждений, как “setData (double [] null)”, которые возвращают ошибки.

Лучший ответ:

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

То, что вы можете сделать, помещает массив в какой-то класс обертки следующим образом:

class ArrayReference<T> { T[] array; // T would be either Double, or Long, or Integer, or whatever }

а потом:

void setData(ArrayReference<Double> myReference) { myReference.array = null; } Ответ №1

Все в java проходит по значению; даже ссылки передаются по значению. Таким образом, передавая массив с помощью метода, вы можете изменить содержимое массива, но вы не можете изменить то, на что указывает массив. Теперь, если вы находитесь внутри класса и случайно передаете член экземпляра, к которому у вас уже есть доступ, в силу того, что он находится в классе, вы сможете установить массив равным null.

Если вы всегда хотите изменить то, на что указывает массив, тогда просто получите функцию, которая возвращает массив (вместо того, чтобы быть void), и присваивать это возвращаемое значение интересующему массиву.

Ответ №2

Я не уверен, понял ли я ваш вопрос, но так ли это, что вы хотите?

public class Stat { private double[] data; public void reset() { data = null; } public void setData(double[] d) { data = (d == null) ? new double[0] : Arrays.copyOf(d, d.length); } }

Оцените статью
Добавить комментарий