вывести двумерный масив в виде матрицы с изменением мест элементов начиная со второй строки
помогите разобратся с задачей: вывести массив в виде матрицы. Есть мысль перебирать вложенный массив и сравнивать например переменную с индексом вложенных массивов и в условии менять местами элементы вложенных массивов но как правильно сделать не понимаю(.
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
→ Ссылка
- Для вывода данной таблицы достаточно использовать пару вложенных циклов / стримов без использования дополнительной памяти в виде массивов:
// циклы
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"))
));
- Если задача все-таки сформировать массив нетривиальным способом, можно воспользоваться методом
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]));
}