java - 将数组值复制到不同的位置
问题描述
我设法完成了第一部分,即创建一个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 循环,但无法使其工作。
有人可以帮我找到更好的解决方案吗?
解决方案
可以使用实用方法将数组转换为列表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;
}
推荐阅读
- python - 如何加密和解密电子邮件地址以匿名数据
- c# - 值 0 (int32) 的 CIL 指令“isinst [System.Runtime]System.Int32” - 将返回什么?
- python - 在 Python 中读取 .xlsx 文件(日期和时间格式不正确)
- autohotkey - 如何将纯文本绑定到键
- php - 旧项目 ZF2 - ServiceManager 中的错误
- performance - 通过表达式查找最佳匹配
- c++ - Char 数组或 const char*(内存效率)
- time-series - Looker - 查找时间序列内所有拐点的第一个日期
- reactjs - 反应钩子:useState,嵌套在 for 循环中的更新器函数不更新状态
- javascript - 在带有输出和输入的角度应用程序待办事项列表中添加待办事项(不起作用)