Java 矩阵

时间:2025-02-17 10:17:52
public class MatrixTest { public static void main(String[] args) { // TODO Auto-generated method stub //创建矩阵 int[][] a = new int[3][4]; int[][] b = new int[3][4]; int[][] c = new int[4][4]; //矩阵赋值 a=Matrix_value(a); b=Matrix_value(b); //输出矩阵 System.out.println("============== 矩阵A =================="); Matrix_Show(a); System.out.println("============== 矩阵B =================="); Matrix_Show(b); // 加法 System.out.println("============== 矩阵A + 矩阵B ============"); Matrix_Add(a, b); // 减法 System.out.println("============== 矩阵A - 矩阵B ============"); Matrix_Sub(a, b); // 乘法 c=Matrix_value(c); System.out.println("============== 矩阵C =================="); Matrix_Show(c); System.out.println("============== 矩阵A * 矩阵C ============"); Matrix_Mul(a, c); //数乘 System.out.println("============== 2 * 矩阵A ================="); Matrix_Mul(2, a); //转置 System.out.println("============== 矩阵A转置 ====================="); Matrix_Tran(a); //旋转 System.out.println("============== 矩阵旋转 ====================="); for (int i = 1; i <= 3; i++) { System.out.println("============== 旋转 " + i + " 次(每次旋转90度) ====================="); a = Matrix_Rotate(a); Matrix_Show(a); } //对角线之差 System.out.println("============== 矩阵对角线之差 ====================="); Matrix_Diag(a); } // 矩阵赋值 public static int[][] Matrix_value(int[][] a) { for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[0].length; j++) { a[i][j] = (int) (Math.random() * 100 + 1); } } return a; } // 输出矩阵 public static void Matrix_Show(int[][] a) { // ((a)); for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[0].length; j++) { System.out.print(a[i][j] + " "); } System.out.println(); } } // 加法 public static void Matrix_Add(int[][] a, int[][] b) { int[][] result = new int[a.length][a[0].length]; for (int i = 0; i < result.length; i++) { for (int j = 0; j < result[0].length; j++) { result[i][j] = a[i][j] + b[i][j]; } } Matrix_Show(result); } // 减法 public static void Matrix_Sub(int[][] a, int[][] b) { int[][] result = new int[a.length][a[0].length]; for (int i = 0; i < result.length; i++) { for (int j = 0; j < result[0].length; j++) { result[i][j] = a[i][j] - b[i][j]; } } Matrix_Show(result); } // 乘法 public static void Matrix_Mul(int[][] a, int[][] b) { int[][] result = new int[a.length][b[0].length]; for (int i = 0; i < result.length; i++) { for (int j = 0; j < result[0].length; j++) { for (int k = 0; k < b.length; k++) { result[i][j] += a[i][k] * b[k][j]; } } } Matrix_Show(result); } // 数乘 public static void Matrix_Mul(int n, int[][] a) { int[][] result = new int[a.length][a[0].length]; for (int i = 0; i < result.length; i++) { for (int j = 0; j < result[0].length; j++) { result[i][j] = a[i][j] * n; } } Matrix_Show(result); } // 矩阵转置 public static void Matrix_Tran(int[][] a) { int[][] result = new int[a[0].length][a.length]; for (int i = 0; i < result.length; i++) { for (int j = 0; j < result[0].length; j++) { result[i][j] = a[j][i]; } } Matrix_Show(result); } // 矩阵旋转 public static int[][] Matrix_Rotate(int[][] a) { // 获得原矩阵的宽高 // 外层一维数组的长度 int w = a.length; // 内层一维数组的长度 int h = a[0].length; // 创建一个新二维数组 int[][] c = new int[h][w]; // 原数组的读取位置 int x = w - 1; int y = 0; // 将原的二维数组反转90度,赋值到新的二维数组中 for (int i = 0; i < c.length; i++) { for (int j = 0; j < c[i].length; j++) { c[i][j] = a[x][y]; x--; } // 换行赋值 x = w - 1; y++; } // 旋转90度之后的结果 return c; } // 矩阵对角线之差 public static void Matrix_Diag(int[][] a) { // 主对角线 int x = 0; // 次对角线 int y = 0; // 外层一维数组的长度 int i = 0; // 内层一维数组的长度 int j = 0; // 求主对角线值 while ((i < a.length) && (j < a[0].length)) { x += a[i][j]; i++; j++; } i = 0; j = a[0].length - 1; // 求次对角线值 while ((i < a.length) && (j >= 0)) { y += a[i][j]; i++; j--; } System.out.println("矩阵对角线之差为 " + (x - y)); } }