有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

左右对角线下方的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) 个答案

  1. # 1 楼答案

    该方法与getTranspose方法非常相似。但是,索引将略有不同。根据您的评论,我们假设矩阵是逐列存储的(即matrixA[i]ith列)。如果事实证明这是向后的(并且似乎是从方法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数组与整个矩阵的关系:它是一列下的一个切片。因此,严格低于result对角线的column元素是位于colIndex上方索引处的元素。也就是说,元素column[0]位于第colIndex列,第0行,元素column[colIndex]位于对角位置(colIndexcolIndex)。只有对角线上的元素才应设置为非零值。这可以通过另一个循环轻松完成:

            for (rowIndex = 0; rowIndex <= colIndex; rowIndex++) {
                // copy the element at position (colIndex, rowIndex) from
                // matrixA to column[rowIndex]
    

    我将把这一点伪代码翻译成实际代码,并完成该方法(包括返回结果)

    如果愿意(并且赋值规则允许),可以使用对内置static方法^{}的调用来替换该内部循环,该方法可以将数组的全部或部分复制到另一个数组(或同一数组的另一部分)。在这种特殊情况下,为调用计算正确的参数留给读者作为练习。:)