int a[][] = {{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4}}
int b[][] = new int [4][7]
for (int i = 0i <4i++) {
for (int j = 0j <7j++) {
b[i][j] = a[j][i]
}
}
System.out.println("矩阵a:")
for (int i = 0i <7i++) {
for (int j = 0j <4j++) {
if (j <3) {
System.out.print(a[i][j] + " ")
} else {
System.out.println(a[i][j] + " ")
}
}
}
System.out.println("矩阵a转置:")
for (int i = 0i <4i++) {
for (int j = 0j <7j++) {
if (j <6) {
System.out.print(b[i][j] + " ")
} else {
System.out.println(b[i][j] + " ")
}
}
}
代码写得烂不要喷我,我想解决思路就是这样吧!
你的Java矩阵转置程序我帮你改好了,主要问题是应该把矩阵中以主对角线对称的数两两交换,而不是简单赋值,冲掉原来的数,而且for-j循环只要访问主对角线下方的数就可以了,不要访问全矩阵的数,那样会使矩阵主对角线下方的数交换两次,从而等于没有转置.
完整的Java矩阵转置程序如下(改动的地方见注释)
package cn.itcast.chapter01public class ZhuanZhi {
public static void main(String[] args) {
int a[][]={{1,2,3},{4,5,6},{7,8,9}}
for(int i=0i<a.lengthi++)
{
for(int j=0j<ij++)//这里把for(int j=0j<a[i].lengthj++)改成for(int j=0j<ij++)只访问主对角线下方的数
{
//这里交换主对角线下方的数和主对角线上方的数
int temp=a[i][j]
a[i][j]=a[j][i]
a[j][i]=temp
}
}
//这里单独输出转置后的矩阵
for(int i=0i<a.lengthi++)
{
for(int j=0j<a[i].lengthj++)
{
System.out.print(a[i][j]+" ")
}
System.out.println()
}
}
}
运行结果