Добрый день. Подскажите пожалуйста, почему в методе не присваиваются значения массива array после копирования из промежуточного массива temp?
public class Solution {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10};
printArray(array);
reverseArray(array);
printArray(array);
}
public static void reverseArray(int[] array) {
int[] temp = new int [array.length]; // промежуточный массив
for (int i = 0; i < array.length; i++) {
temp[i] = array[array.length - 1 - i];
}
// копирование из промежуточного массива
array = Arrays.copyOf(temp, temp.length);
// Почему метод не возращает этот массив?
}
public static void printArray(int[] array) {
for (int i : array) {
System.out.print(i + ", ");
}
System.out.println();
}
}
Ievgen Baz
14 уровень
Где ошибка в решении через промежуточный массив?
Решен
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
11 февраля 2021, 13:54решение
Ты запутался, где у тебя какой объект.
Изначально у тебя локальная переменная внутри reverse() ссылается на тот же объект, что и array в мейне. Потом ты методом Arrays.copyOf() создаешь новый объект и помещаешь ссылку на него в локальную переменную в методе reverse(). Переменная в main на какой объект ссылалась, на тот и продолжила ссылаться, она никак не изменилась.
Ты в метод передаешь не переменную, а ссылку на объект, на который она ссылается.
Получается, что сначала у тебя две переменных ссылаются на один объект, пока ты сам не изменяешь это командой array = ... // команда присвоения нового значения переменной.
Поэтому если метод должен изменять значения массива, значит не нужно присваивать аргументу метода новое значение. Нужно изменять именно элементы этого массива.
+3
hidden #598481
11 февраля 2021, 13:57
Внутри copyOf создается новый массив, подчеркнул.
Практически спойлер к фильму "Престиж" получается :)
0
Ievgen Baz
11 февраля 2021, 14:18
Точно! Вот где собака зарыта! Нужно было знать как работают методы класса Arrays. Спасибо.
0
iamshur
16 мая 2021, 21:19
Спасибо! Очень понятное объяснение, с дебаггером так и не понимала, где промахнулась.
0
Ievgen Baz
11 февраля 2021, 12:55
Дык метод void и ничего не должен возвращать. Он должен изменить array. Не понимаю.
0
Андрей
11 февраля 2021, 11:41
Я про аргумент метода ReverseArray
0
Андрей
11 февраля 2021, 11:38
напиши аргумент в скобках не array, а по другому? И измени также его название в методе?) Ну и думай дальше
0
hidden #598481
11 февраля 2021, 11:11
Прикрепи код
0