【问题标题】:swapping elements in matrices a and b above main diagonal when elements are equal and if number of rows columns of matrix a == rows columns matrix b当元素相等且矩阵 a == 行列矩阵 b 的行数时,在主对角线上方交换矩阵 a 和 b 中的元素
【发布时间】:2021-04-20 09:51:25
【问题描述】:

代码应该只在主对角线上方的矩阵 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();
}

}

输入是

矩阵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

【问题讨论】:

  • 您在问题中描述的要求与swapElements方法中提供的代码不匹配。您忽略该参数,只检查您的矩阵是否具有相同的行数和列数。并且您不会将调用对象的元素与传递对象的元素交换,而是将同一对象中对角线下方和上方的元素交换。
  • @Eritrean 我对编码有点陌生(3 个月的经验 tbh)你建议在我的代码中改变什么?

标签: java


【解决方案1】:

假设除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 循环中。 Tipp 即使单个语句 if 和 for 循环不需要使用花括号,也被认为是最佳实践。

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

【讨论】:

  • 我的打印方法好像也错了,你能建议对我的打印方法进行任何更改吗?提前致谢!
  • printArray 显示了在 swapelements 方法之前生成的矩阵,我应该将交换元素存储到一个新变量中然后调用 printarray 方法吗?
  • 我在上面添加了 main 方法
  • 非常感谢,最后一件事,我怎样才能像在交换元素方法之前一样在交换元素方法之后打印矩阵?
  • nvm 我修好了,谢谢你帮了我很多
猜你喜欢
  • 1970-01-01
  • 2017-04-20
  • 2013-04-20
  • 2017-10-31
  • 2017-09-26
  • 1970-01-01
  • 2020-11-04
  • 2018-10-19
  • 2023-03-15
相关资源
最近更新 更多