Как развернуть массив в Java

Author: Tatyana Milkina

В этом уроке мы рассмотрим как перевернуть массив в Java, или по другому это называется реверс массива.

Существует массив {1, 2, 3, 4} и его надо развернуть (или инвертировать) и получить массив {4, 3, 2, 1}.

Находим середину массива - array.length / 2. Перебираем элементы массива от начала до середины и одновременно меняем местами элементы с индексом i и array.length - i - 1. Для обмена значениями используем вариант с введением временной переменной, рассмотренный в предыдущем разделе: 

public class ArrayInverter {
    public static void invert(int[] array) {
        for (int i = 0; i < array.length / 2; i++) {
            int tmp = array[i];
            array[i] = array[array.length - i - 1];
            array[array.length - i - 1] =  tmp;
        }
    }
}

Обратите внимание, что в классе ArrayInverter нет метода main() - будем вызывать метод invert() из другого класса. Для вызова метода, находящегося в другом классе, пишем имя класса - ArrayInverter.invert(array1):

import java.util.Arrays;

public class ArrayInverterExample1 {
    public static void main(String[] args) {
        int[] array1 = new int[]{};
        System.out.print(Arrays.toString(array1) + " => ");
        ArrayInverter.invert(array1);
        System.out.println(Arrays.toString(array1));

        array1 = new int[]{0};
        System.out.print(Arrays.toString(array1) + " => ");
        ArrayInverter.invert(array1);
        System.out.println(Arrays.toString(array1));

        array1 = new int[]{0, 1};
        System.out.print(Arrays.toString(array1) + " => ");
        ArrayInverter.invert(array1);
        System.out.println(Arrays.toString(array1));

        array1 = new int[]{0, 1, 2};
        System.out.print(Arrays.toString(array1) + " => ");
        ArrayInverter.invert(array1);
        System.out.println(Arrays.toString(array1));

        array1 = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        System.out.print(Arrays.toString(array1) + " => ");
        ArrayInverter.invert(array1);
        System.out.println(Arrays.toString(array1));
    }
}

Если мы внимательно посмотрим на код в классе ArrayInverterExample1, то увидим, что один блок кода повторяется пять раз. Дублирование кода - это плохая практика, поэтому вынесем повторяющийся код в отдельный метод, который будет вызываться пять раз с разными значениями: 

import java.util.Arrays;

public class ArrayReverseExample {
    public static void main(String[] args) {
        testInvert(new int[]{});
        testInvert(new int[]{0});
        testInvert(new int[]{0, 1});
        testInvert(new int[]{0, 1, 2, 3, 4});
    }

    private static void testInvert(int[] array) {
        System.out.print(Arrays.toString(array) + " => ");
        ArrayInverter.invert(array);
        System.out.println(Arrays.toString(array));
    }
}
Read also:
Comments
Abrekers
Feb 4, 2021
По мне это самое сложное, придумывать алгоритмы для решение каких-либо задач. Не подскажи как прокачать этот навык?
milkina
Feb 4, 2021
Больше пишите кода, изучайте существующие алгоритмы. С опытом и временем этот навык прокачается.