нужно отсортировать массив с заменной следующего элемента на предыдущий 1,2,3,4,5,6 = 2,1,4,3,6,5

Рейтинг: 0Ответов: 2Опубликовано: 03.02.2023

Добрый день нужно отсортировать массив с заменной следующего элемента на предыдущий.2143... ломаю голову уже второй час не могу найти информацию буду очень благодарен если вы скажете что не так с моим кодом P.Sпонимаю что если элементов будет не четное кол-во то будет исключение: выход за пределы массива

public static void main(String[] args) {
    int [] mass = new int[]{0,1,2,3,4,5,6,7};
    for (int i = 0; i <mass.length; i+=2) {
      int temp = mass[i];
      mass[i] = mass[i+1];
      mass[i+1] = temp;
        System.out.print(mass[i]);
    }
}

Ответы

▲ 1Принят

Да в принципе всё нормально.
Чтобы не было выхода за пределы массива цикл нужно делать до mass.length-1. Тогда и четное и нечетное количество элементов обработается правильно.

for (int i = 0; i <mass.length-1; i+=2) {

А чтобы вывелось на печать нормально нужно либо печатать в цикле 2 элемента - mass[i] и mass[i+1], либо выводить массив в отдельном цикле после обработки, чтобы не задумываться об отдельном выводе последнего элемента в случае нечетного их количества

for (int i = 0; i <mass.length; i+=2) {
    int temp = mass[i];
    mass[i] = mass[i+1];
    mass[i+1] = temp;
}

for(int i : mass)
    System.out.print(i);
▲ 0

В общем случае входной массив надо отсортировать (например, при помощи Arrays.sort(int[] arr).
Также для вывода содержимого небольшого одномерного массива достаточно использовать стандартный метод Arrays.toString.

Затем для перестановки элементов в парах можно начать прохождение с индекса 1 (i - 1 >= 0):

Arrays.sort(arr);
for (int i = 1; i < arr.length; i += 2) {
    int tmp = arr[i - 1];
    arr[i - 1] = arr[i];
    arr[i] = tmp;
}
System.out.println(Arrays.toString(arr));

Или же можно ограничить на 1 значения индексов в конце массива (чтобы i + 1 < n), как показано в предыдущем ответе. Также можно переставить значения в массиве без использования третьей переменной, например при помощи XOR:

Arrays.sort(arr);
for (int i = 0; i < arr.length - 1; i += 2) {
    arr[i] = arr[i] ^ arr[i + 1] ^ (arr[i + 1] = arr[i]);
}
System.out.println(Arrays.toString(arr));