Абсурдность злоупотребления свопами? - PullRequest
1 голос
/ 30 мая 2020

ниже представлена ​​реализация обратного массива в java. Я прошел через это логически, и мне кажется, что он должен работать.

public static int[] reverseArray(int[] arr){
int temp = 0;
int[] newArr;
newArr = Arrays.copyOf(arr, arr.length);
for (int i = 0; i < arr.length - 1; i++){
temp = newArr[i];
newArr[i] = newArr[arr.length - 1 - i];
newArr[arr.length - 1 - i] = temp;
}
return newArr;
}

Я передаю массив [1, 2, 3, 4, 5] Он возвращает мне только первое последнее число, замененное местами . Возвращает [5, 2, 3, 4, 1]

Ответы [ 2 ]

3 голосов
/ 30 мая 2020

Вы выполняете цикл до конца массива, что приводит к сбою вашего logi c.

Вы должны l oop до arr.length/2 вместо цикла всего массива. Цикл всего массива приведет к тому, что ваша программа выполнит следующее -

  • поменять местами элементы и перевернуть массив в первой половине l oop: Теперь, когда l oop достигает индекса - arr.length/2, все элементы уже поменяны местами друг с другом, и ваш массив был перевернут.
  • Возврат всех элементов назад начинается во второй половине of l oop: это фактически начинает возвращать элементы массива на их исходное место. Когда l oop достигает индекса arr.length - 1, ваш массив возвращается к исходной форме.

Решение:

Просто остановите l oop, когда вы наберете arr.length/2, и ваша программа будет работать нормально. Итак, ваша функция for-l oop in reverseArray должна быть следующей:

for (int i = 0; i < arr.length/2 ; i++)
1 голос
/ 30 мая 2020

Вы меняете местами элементы дважды.

В вашем примере, когда i равно 1, вы меняете местами элементы 1 и 3. Затем, когда i равно 3, вы меняете местами элементы 3 и 1, фактически возвращая их туда, где они были изначально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...