我必须使用这个程序才能使这个方法返回一个二维矩阵,其中:
我必须使用此标头:public static int[][] replaceLowerWithZero(int[][] matrixA)
这是我得到的线索:定义一个具有相同行数的二维数组 和列为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){
答案 0 :(得分:0)
该方法与您的getTranspose
方法非常相似。但是,索引将略有不同。根据您的评论,我们假设矩阵是逐列存储的(即matrixA[i]
是i
th 列。如果事实证明这是向后的(并且它似乎是从方法getTranspose
中的变量名称判断),那么你将不得不修改逻辑,但是应该很容易弄清楚如何做它
由于这是一项任务,我不想只是将代码转储到答案中;相反,我将概述如何通过提供一些代码和评论来解决问题。
首先,我们将从分配的方法签名开始:
public static int[][] replaceLowerWithZero(int[][] matrixA) {
接下来,我们检索矩阵大小。因为根据赋值我们可以假设一个方阵,我们所需要的只是一个维度。我们称之为n
:
int n = matrixA.length;
现在我们分配一个新的矩阵作为返回值:
int[][] result = new int[n][n];
根据Java语言,result
的所有元素都将初始化为零。由于这是您想要的结果的下三角部分,我们只需要将matrixA
的值复制到result
,以获取对角线上方和上方的元素。我们可以一次处理每一栏:
for (int colIndex = 0; colIndex < n; colIndex++) {
int[] column = result[colIndex]; // all elements zero at this point
逻辑其余部分的关键是可视化column
数组与整个矩阵的关系:它是一列切片。因此,严格低于column
对角线的result
元素是位于colIndex
之上的索引的元素。也就是说,元素column[0]
位于列colIndex
,第0行和元素column[colIndex]
位于对角线的位置(colIndex
,colIndex
)。只有对角线上方和上方的元素应设置为非零值。这可以通过另一个循环轻松完成:
for (rowIndex = 0; rowIndex <= colIndex; rowIndex++) {
// copy the element at position (colIndex, rowIndex) from
// matrixA to column[rowIndex]
我会留给你把那个伪代码转换成实际的代码,并完成方法(包括返回结果)。
如果您愿意(并且分配规则允许),您可以通过调用内置static
方法System.arraycopy
替换该内部循环,该方法可以复制全部或部分数组另一个数组(或同一个数组的另一部分)。在这个特定情况下,为这个调用找出正确的参数留给读者一个练习。 :)