Java 当元素相等且矩阵a的行数和列数=矩阵b的行数和列数时,交换主对角线上方矩阵a和b中的元素

Java 当元素相等且矩阵a的行数和列数=矩阵b的行数和列数时,交换主对角线上方矩阵a和b中的元素,java,Java,仅当矩阵a和矩阵b的元素数相等且a的行数和列数=b的行数和列数时,代码才应更改主对角线上方的矩阵a和矩阵b的元素。例如,a MxN==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

仅当矩阵a和矩阵b的元素数相等且a的行数和列数=b的行数和列数时,代码才应更改主对角线上方的矩阵a和矩阵b的元素。例如,a MxN==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();
}
矩阵B

-8    -7    -2    -2
-6     0    -7     0
-1    -2    -2    -2
 0    -6    -6    -7
-8    -7    -5    -9
-6     0    -2    -3
-1    -2    -2    -2
 0    -6    -6    -7
期望输出为

矩阵A

 -8    -5    -5    -9
 -1    -2    -2    -3
 -10   -10     0    -3
 -4   -10    -6    -6
-8    -5    -2    -2
-1    -2    -7     0
-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
-8    -7    -5    -9
-6     0    -2    -3
-1    -2    -2    -2
 0    -6    -6    -7

假设除
swaplements
之外的所有其他方法都能完成它们的任务,那么您应该寻找以下类似的方法

//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");
    }
}

问题中描述的要求与方法
swaplements
中提供的代码不匹配。忽略该参数,仅检查矩阵的行数和列数是否相同。您不会将调用对象的元素与传递对象的元素交换,而是将同一对象中的双对角线上下元素交换。@Eritrian我对编码有点陌生(3个月的经验tbh)。您建议在我的代码中更改什么?似乎我的打印方法也错了,你能建议对我的打印方法做些改变吗?提前谢谢!printArray显示了swapelements方法之前生成的矩阵,我是否应该将交换元素存储到一个新变量中,然后调用printarraymethod?我在上面添加了main方法非常感谢,最后一件事,我怎样才能像在交换元素方法之前一样在交换元素方法之后打印矩阵?nvm我修复了它,thx很多人你真的帮了我