Подскажите почему "правильный ответ" работает?
public static void reverseArray(int[] array) {
for (int i = 0; i < array.length / 2; i++) {
int temp = array[i];
array[i] = array[array.length - i - 1];
array[array.length - i - 1] = temp;
}
}
Начинаю подставлять числа и получается каша какая-то. Для простоты счёта для примера беру массив {1, 2, 3, 4, 5}.
i=0. значит temp=1. array[0]=array[4-0-1] (array[3], то есть"4"). array[4-0-1]=1. Итог первого проворота цикла: {4, 2, 3, 1, 5}.
i=1. значит temp=2. array[1]=array[4-1-1] (array[2], то есть "3"). array[4-1-1]=2. Итог второго цикла проворота цикла: {4, 3, 2, 1, 5}.
так цикл выполняется пока i < array.length / 2 (длина 4. делим на 2, получаем 2. значит пока i < 2) значит цикл закончен и больше выполняться не будет.
Где я не правильно считаю или подставляю числа? Или ошибка в логике самого цикла?
Andrew_kgd
11 уровень
де я не правильно считаю или подставляю числа? Или ошибка в логике самого цикла?
Обсуждается
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Andrew_kgd
14 июля 2022, 20:16
public static void reverseArray(int[] array) {
for (int i = 0; i < array.length / 2; i++) {
int temp = array[i];
array[i] = array[array.length - i ];
array[array.length - i] = temp;
}
}
а если записать так, то тогда считается правильно. В первом проходе цикла меняются местами первый и последний элементы. При втором проходе второй и предпоследний. На этом цикл заканчивается и массив оказывается перезаписанным наоборот.
0
Lexman (Алексей)Full Stack Developer в TrendSoft
14 июля 2022, 20:21
Тогда ваш код при нечетном количестве символов будет работать неправильно
0
Andrew_kgd
14 июля 2022, 20:42
для правильной работы при чётном цикле необходимо подправить условие цикла на такое:
for (int i = 0; i <= array.length / 2; i++)
тогда и при четном, и не четном будет происходить правильная перестановка массива.
0
Lexman (Алексей)Full Stack Developer в TrendSoft
14 июля 2022, 20:15
Потому что для реверса в данной ситуации нужно создать новый массив и уже в него записать символы в обратном порядке
А с одним массивом вы начинаете менять то, что уже изменили, отсюда и каша
0
Andrew_kgd
14 июля 2022, 20:36
подскажите, что за новый массив? в правильном ответе я его не нахожу...
0