Поменять столбцы местами в матрице

171
01 декабря 2021, 13:50

При работе с матрицами, а именно с двумерным массивом назовем его int[][]a для замены строк мы можем сделать так:

for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a.length; j++) {
                var temp = a[i];
                a[i] = a[j];
                a[j] = temp;
        }
    }

В этом случае все просто, и работоспособно. Но можем ли мы сделать что то подобное со столбцами? Я пытался сделать вариант var temp=a[][i] или что то подобное, не компилятор выбивает ошибку.Есть какое-нибудь лаконичное решение данной проблемы, как на примере выше со строками?

Answer 1

Боюсь что простого лаконичного решения нет, т.к. столбцов физически не существует, это элементы в разных массивах.

Можно написать метод, который будет менять столбцы местами:

private static void swapColumns(int[][] a, int first, int second) {
    //меняем элементы в каждой строке
    for(int r=0; r<a.length; r++) {
         int temp = a[r][first];
         a[r][first] = a[r][second];
         a[r][second] = temp;
    }
}

И затем уже использовать его:

for...
    swapColumns(a, i, j);
Answer 2

Чтобы поменять местами строки, циклы вообще не нужны. А вот чтобы поменять местами столбцы, один цикл придется использовать:

// Строки х и у меняются местами
var tempRow = a[x];
a[x] = a[y];
a[y] = tempRow;
// Столбцы х и у меняются местами
for (int i = 0; i < a.length; i++) {
    var tempCol = a[i][x];
    a[i][x] = a[i][y];
    a[i][y] = tempCol;
}
READ ALSO
В чем причина ошибки &quot;cannot find symbol&quot; [закрыт]

В чем причина ошибки "cannot find symbol" [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

218
Почему родительский блок меняет свой размер с :hover?

Почему родительский блок меняет свой размер с :hover?

у меня присутствует ховер, который добавляет линию подчеркивания под объектом]2

149
Как сделать отображение шрифта иконок кросс-браузерно?

Как сделать отображение шрифта иконок кросс-браузерно?

Как сделать отображение шрифта иконок кросс-браузерно?

80
Предикат для сравнения массива char

Предикат для сравнения массива char

Хочу отсортировать массив из массивов char (char[32])Хочу использовать метод sort из stl

137