java - 当元素相等且矩阵 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
解决方案
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);
}