左右对角线下方的java Make矩阵值设置为0
我必须使用这个程序,使这个方法返回一个二维矩阵,其中:
- 左右对角线上和上方的值与matrixA中存储的值相同李>
- 左右对角线下方的值设置为0,并假设矩阵的行数等于矩阵的列数李>
我必须使用这个头:public static int[][] replaceLowerWithZero(int[][] matrixA)
这里是我得到的一个线索:定义一个具有相同行数的二维数组 和列作为矩阵。此数组中的每个元素最初都设置为零。使用 用于更改左右对角线上和上方的值的嵌套循环
这就是我到目前为止所做的:
public static int[][] getTranspose(int[][] matrixA) {
int numRows = matrixA.length;
int numCols = matrixA[0].length;
int[][] transpose = new int[numCols][numRows];
for (numRows = 0; numRows < matrixA.length; numRows++) {
for (numCols = 0; numCols < matrixA[numRows].length; numCols++) {
tranpose[numCols][numRows]=0;
}
}
return transpose;
}
public static int getLRDiagonalSum(int[][] B) {
int sum = 0;
for (int rows = 0; rows < B.length; rows++) {
sum = sum + B[rows][rows];
}
return sum;
}
public static int getRLDiagonalSum(int[][] B) {
int sum = 0;
for (int cols = 0; cols < B.length; cols++) {
sum = sum + B[cols][cols];
}
return sum;
public static int[][] replaceLowerWithZero(int[][] matrixA){
# 1 楼答案
该方法与
getTranspose
方法非常相似。但是,索引将略有不同。根据您的评论,我们假设矩阵是逐列存储的(即matrixA[i]
是i
th列)。如果事实证明这是向后的(并且似乎是从方法getTranspose
中的变量名来判断),那么您将不得不修改逻辑,但应该很容易找到如何做的方法由于这是一项作业,我不想只是将代码转储到答案中;相反,我将通过提供一些代码和注释来概述如何解决这个问题
首先,我们将从分配的方法签名开始:
接下来,我们检索矩阵大小。因为根据赋值,我们可以假设一个平方矩阵,所以我们只需要一维。我们称之为
n
:现在,我们分配一个新矩阵作为返回值:
根据Java语言,
result
的所有元素都将初始化为零。因为这是结果的下三角部分所需要的,我们只需要将对角线上和对角线上方的元素的值从matrixA
复制到result
。我们可以一次处理每个列:其余逻辑的关键是可视化
column
数组与整个矩阵的关系:它是一列下的一个切片。因此,严格低于result
对角线的column
元素是位于colIndex
上方索引处的元素。也就是说,元素column[0]
位于第colIndex
列,第0行,元素column[colIndex]
位于对角位置(colIndex
,colIndex
)。只有对角线上的元素才应设置为非零值。这可以通过另一个循环轻松完成:我将把这一点伪代码翻译成实际代码,并完成该方法(包括返回结果)
如果愿意(并且赋值规则允许),可以使用对内置} 的调用来替换该内部循环,该方法可以将数组的全部或部分复制到另一个数组(或同一数组的另一部分)。在这种特殊情况下,为调用计算正确的参数留给读者作为练习。:)
static
方法^{