вывести двумерный масив в виде матрицы с изменением мест элементов начиная со второй строки

помогите разобратся с задачей: вывести массив в виде матрицы. Есть мысль перебирать вложенный массив и сравнивать например переменную с индексом вложенных массивов и в условии менять местами элементы вложенных массивов но как правильно сделать не понимаю(.

    1 2 3 4 5 6
    2 3 4 5 6 1
    3 4 5 6 1 2
    4 5 6 1 2 3
    5 6 1 2 3 4
    6 1 2 3 4 5

public class MatrixIntArr {

public static int[][] pyramideMatrix(int cells) {

    int index = cells * cells;

    int[][] arr = new int[7][7];

    int indexCount = 0;
    int indexCount2;
    for (int i = 0; i < arr.length; i++) {
        for (int j =  1; j < arr[i].length; j++) {
            indexCount++;
            arr[i][j] = i + j;
            System.out.print(j + " \t");
            if (j == 1 || indexCount == i) {
                //Collections.swap(Arrays.asList(arr), 1,3);
                swapElems(arr,1,3);
            }
        }
        System.out.println("\n");
    }
    return arr;
}

public static void swapEls(int[][] arr, int el1, int el2, int el3) {
    Arrays.stream(arr).forEach(el -> {
        int temp = arr[el1][el2];
        arr[el1][el2] = arr[el1][el3];
        arr[el1][el3] = temp;
    });
}

public static void swapElems(int[][] arr, int el1, int el2) {
    Arrays.stream(arr).forEach(el -> {
        int temp = el[el2];
        el[el2] = el[el1];
        el[el1] = temp;
    });
}



public static void main(String[] args) {
    //pyramideMatrix(7);

    
}

}


Ответы (1 шт):

Автор решения: Nowhere Man
  1. Для вывода данной таблицы достаточно использовать пару вложенных циклов / стримов без использования дополнительной памяти в виде массивов:
// циклы
final int n = 6;
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        System.out.print(1 + (j + i) % n);
        System.out.print('\t');
    }
    System.out.println();
}

// стримы
IntStream.range(0, n)
    .forEach(i -> System.out.println(IntStream.range(0, n)
        .map(j -> 1 + (i + j) % n)
        .mapToObj(Integer::toString)
        .collect(Collectors.joining("\t"))
    ));
  1. Если задача все-таки сформировать массив нетривиальным способом, можно воспользоваться методом Arrays.copyOf для получения копии предыдущей строки, которую затем сдвинуть на 1 позицию:
int[][] a = new int[n][];
for (int i = 0; i < n; i++) {
    a[i] = i == 0 
        ? IntStream.rangeClosed(1, n).toArray() 
        : Arrays.copyOf(a[i - 1], n);
    if (i > 0) {
        int x = a[i][0];
        for (int j = 0; j < n - 1; j++) {
            a[i][j] = a[i][j + 1];
        }
        a[i][n - 1] = x;
    }
    System.out.println(Arrays.toString(a[i]));
}
→ Ссылка