Java setMatrixVals方法使用嵌套for循环复制二维数组参数到私有字段求助
解决方法
你只需要在setMatrixVals方法的预留位置补充两层嵌套for循环,分别遍历二维数组的行、列索引,逐元素赋值即可,修改后的完整代码如下:
//make public class public class Matrix { //field for two dim arrays private int [][] matrixVals; //constructor public Matrix (int mVals[][]) { //call the setMatrixVals( ) method to assign the correct information to the //private field setMatrixVals(mVals); } //setter method public void setMatrixVals (int [][] mVals) { // 新增入参非空判断,避免空指针异常 if (mVals == null || mVals.length == 0) { matrixVals = new int[0][0]; return; } matrixVals = new int[mVals.length][mVals[0].length]; // 外层循环遍历所有行 for (int i = 0; i < mVals.length; i++) { // 内层循环遍历当前行的所有列元素 for (int j = 0; j < mVals[i].length; j++) { // 逐元素拷贝赋值 matrixVals[i][j] = mVals[i][j]; } } } }
逻辑说明
- 外层循环的变量
i是二维数组的行索引,遍历范围为0到mVals.length - 1,对应所有行 - 内层循环的变量
j是二维数组的列索引,遍历范围为0到mVals[i].length - 1,对应当前行的所有元素 - 每次循环直接把入参数组对应位置的元素赋值给类成员数组的对应位置,完成深拷贝
优化提示
你原有代码里初始化数组时直接取mVals[0].length作为列长度,默认所有行长度相同,如果你需要兼容不规则二维数组(每行长度不一致的二维数组),可以把数组行的初始化放到外层循环内,写法如下:
public void setMatrixVals (int [][] mVals) { if (mVals == null || mVals.length == 0) { matrixVals = new int[0][0]; return; } // 先初始化第一维,只指定行数量 matrixVals = new int[mVals.length][]; for (int i = 0; i < mVals.length; i++) { // 逐行初始化对应长度的一维数组 matrixVals[i] = new int[mVals[i].length]; for (int j = 0; j < mVals[i].length; j++) { matrixVals[i][j] = mVals[i][j]; } } }
内容的提问来源于stack exchange,提问作者NewStudent
相关产品推荐
相关产品推荐

