нужно отсортировать массив с заменной следующего элемента на предыдущий 1,2,3,4,5,6 = 2,1,4,3,6,5
Добрый день нужно отсортировать массив с заменной следующего элемента на предыдущий.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]);
}
}
Ответы (2 шт):
Да в принципе всё нормально.
Чтобы не было выхода за пределы массива цикл нужно делать до 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);
В общем случае входной массив надо отсортировать (например, при помощи 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));