首页 > 解决方案 > 将数组值复制到不同的位置

问题描述

我设法完成了第一部分,即创建一个3x2数组并在其中放入一些数字。但是,我无法为第二部分找到一个好的解决方案。任务是:

将第 2 行的值复制到第 1 行,将第 3 行的值复制到第 2 行,将第 1 行的值复制到第 3 行

这就是我的解决方案:

int[][] m = {{3, 7}, {4, 8}, {5, 9}};

n[0][0] = m[1][0];
n[0][1] = m[1][1];

n[1][0] = m[2][0];
n[1][1] = m[2][1];

n[2][0] = m[0][0];
n[2][1] = m[0][1];

System.out.println("");

for (int[] g : n) {
    for (int h : g)
        System.out.print(h + " ");
    System.out.println("");
}

我尝试使用 for 循环,但无法使其工作。

有人可以帮我找到更好的解决方案吗?

标签: javaarrayssorting

解决方案


可以使用实用方法将数组转换为列表Arrays.asList,然后将方法Collections::rotate应用于此列表以根据需要移动行。

由于列表由初始数组备份,因此对列表的所有更改也将应用于此数组。

例子:

int [][] m = {{3,7},{4,8},{5,9}};
System.out.println(Arrays.deepToString(m));
Collections.rotate(Arrays.asList(m), -1);
System.out.println(Arrays.deepToString(m));

输出:

[[3, 7], [4, 8], [5, 9]]
[[4, 8], [5, 9], [3, 7]]

如果这个解决方案对于家庭作业来说太高级了,实现向左旋转 1 的旋转移位的方法可能如下所示:

public static void shiftLeftBy1(int[][] arr) {
    // copy the first row into another int[] array
    int[] copyRow = Arrays.copyOf(arr[0], arr[0].length);

    // shift the rows (no need to move each cell separately)
    for (int i = 0; i < arr.length - 1; i++) {
        arr[i] = arr[i + 1];
    }

    // set the last row to the first one
    arr[arr.length - 1] = copyRow;
}

推荐阅读