【发布时间】: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