首页 > 解决方案 > 当元素相等且矩阵 a == 行列矩阵 b 的行数时,在主对角线上方交换矩阵 a 和 b 中的元素

问题描述

只有当它们的元素数量相等并且a的行数和列数== b的行数和列数(例如A MxN)时,代码才应该在主对角线上方更改矩阵a和矩阵b的元素== B MxN,A NxM == B NxM,任何帮助将不胜感激。

    Matrix matrixA = new Matrix("Matrix A", 4, 4);
    Matrix matrixB = new Matrix("Matrix B", 4, 4);

    matrixA.RandomElements(-10, 10);
    matrixB.RandomElements(-10, 10);

    System.out.println(matrixA.toString());
    System.out.println(matrixB.toString());

    matrixA.swapElements(matrixB);
    matrixA.printArray(matrixA);





public Matrix(String name, int numberofRows, int numberofCols) {
    this.name = name;
    elements = new int[numberofRows][numberofCols];
}

void RandomElements(int a, int b) {
    Random number = new Random();
    for (int i = 0; i < elements.length; i++) {
        for (int j = 0; j < elements[i].length; j++) {
            elements[i][j] = number.nextInt(b + 1) + a;
        }
    }
}

@Override
public String toString() {
    String text = "";
    text += name + "\n";

    for (int i = 0; i < elements.length; i++) {
        for (int j = 0; j < elements[i].length; j++) {
            text += String.format("%6d", elements[i][j]);
        }
        text += "\n";
    }
    return text;
}

public void swapElements(Matrix matrix){
    if (elements.length == elements[0].length) {
        for (int i = 0; i < elements.length; ++i){
            for (int j = 0; j < elements[i].length; j++) {
                if (i > j) {
                    int temp = elements[i][j];
                    elements[i][j] = elements[j][i];
                    elements[j][i] = temp;
                }
            }
        }
    }else{
        System.out.println("not valid");
    }
}


public void printArray(Matrix matrix){
    int i,j;
    for ( i = 0; i < elements.length; ++i) {
        for ( j = 0; j < elements[0].length; ++j)
            System.out.print(elements[i][j] + " ");
    }
    System.out.println();
}

}

输入是

矩阵 A

 -8    -5    -5    -9
 -1    -2    -2    -3
 -10   -10     0    -3
 -4   -10    -6    -6

矩阵 B

-8    -7    -2    -2
-6     0    -7     0
-1    -2    -2    -2
 0    -6    -6    -7

所需的输出是

矩阵 A

-8    -5    -2    -2
-1    -2    -7     0
-10   -10     0    -3
-4   -10    -6    -6

矩阵 B

-8    -7    -5    -9
-6     0    -2    -3
-1    -2    -2    -2
 0    -6    -6    -7

标签: java

解决方案


swapElements假设所有其他方法,除了做他们应该做的事情之外,你应该寻找类似下面的东西。

//changed param name to make it clear
public void swapElements(Matrix other){
    //if this object have the same dimenssions as other object
    if (this.elements.length == other.elements.length && 
        this.elements[0].length == other.elements[0].length) {

        for (int i = 0; i < elements.length; ++i){
            for (int j = 0; j < elements[i].length; j++) {
                if (i < j) {
                    int temp = elements[i][j];
                    this.elements[i][j] = other.elements[i][j];
                    other.elements[i][j] = temp;
                }
            }
        }
    }else{
        System.out.println("not valid");
    }
}

编辑

将 println 语句移动到 for 循环中。提示即使单个语句 if 和 for 循环不需要使用花括号,也被认为是最佳实践。

public void printArray(Matrix matrix){
    System.out.println(matrix);  
}

推荐阅读