m0_63145759 2021-12-08 19:53 采纳率: 84.2%
浏览 28
已结题

这是什么问题?有人解答一下吗?

img

  • 写回答

1条回答 默认 最新

  • -Undefined_ 2021-12-08 22:39
    关注
    import java.util.Scanner;
    
    class home {
        private int[][] a;
        private int[][] b;
        private int x, y, x1, y1;
    
        public void assignment() {
            home r = new home();
            Scanner reader = new Scanner(System.in);
            System.out.println("请输入两个矩阵的行数和列数");
            System.out.print("第一个矩阵行数为:");
            x = reader.nextInt();
            System.out.print("第一个矩阵列数为:");
            y = reader.nextInt();
            System.out.print("第二个矩阵行数为:");
            x1 = reader.nextInt();
            System.out.print("第二个矩阵列数为:");
            y1 = reader.nextInt();
            a = new int[x][y];
            b = new int[x1][y1];
            System.out.println("请输入第一个矩阵中的数据");
            for (int i = 0; i < x; i++) {
                for (int j = 0; j < y; j++) {
                    a[i][j] = reader.nextInt();
                }
            }
            System.out.println("第一个矩阵为:");
            for (int i = 0; i < x; i++) {
                for (int j = 0; j < y; j++) {
                    System.out.print(a[i][j] + "\t");
                }
                System.out.println();
            }
            System.out.println("请输入第二个矩阵中的数据");
            for (int i = 0; i < x1; i++) {
                for (int j = 0; j < y1; j++) {
                    b[i][j] = reader.nextInt();
                }
            }
            System.out.println("第二个矩阵为:");
            for (int i = 0; i < x1; i++) {
                for (int j = 0; j < y1; j++) {
                    System.out.print(b[i][j] + "\t");
                }
                System.out.println();
            }
            System.out.println("请选择对矩阵的运算:1加法,2减法,3转置,4乘积");
            int operation = reader.nextInt();
            for (; operation != 1 && operation != 2 && operation != 3 && operation != 4; ) {
                System.out.println("输入错误,请重新输入");
                operation = reader.nextInt();
            }
            if (operation == 1) {
                System.out.println("两个矩阵相加为:");
                int[][] c = r.add(a,b,x,y,x1,y1);
                if (c != null) {
                    r.print(c, x, y);
                }
            } else if (operation == 2) {
                System.out.println("两个矩阵相减为:");
                int[][] c = r.jian(a,b,x,y,x1,y1);
                if (c != null) {
                    r.print(c, x, y);
                }
            } else if (operation == 3) {
                int[][] c = r.turn(a, x, y);
                int[][] d = r.turn(b, x1, y1);
                System.out.println("a矩阵转置为:");
                r.print(c, x, y);
                System.out.println("b矩阵转置为:");
                r.print(d, x, y);
            } else {
                System.out.println("两个矩阵相乘为:");
                int[][] c = r.cheng(a,b,x,y,x1,y1);
                if (c != null) {
                    r.print(c, x, y);
                }
            }
        }
    
        private int[][] add(int [][]a,int [][]b,int x,int y,int x1,int y1) {
            if (x == x1 && y == y1) {
                int [][]c = new int[x][y];
                for (int i = 0; i < x; i++) {
                    for (int j = 0; j < y; j++) {
                        c[i][j] = a[i][j] + b[i][j];
                    }
                }
                return c;
            } else {
                System.out.println("两个数组不能相加,因为a b不是同型数组");
                return null;
            }
        }
    
        private int[][] jian(int [][]a,int [][]b,int x,int y,int x1,int y1) {
            if (x == x1 && y == y1) {
                int[][] c = new int[x][y];
                for (int i = 0; i < x; i++) {
                    for (int j = 0; j < y; j++) {
                        c[i][j] = a[i][j] - b[i][j];
                    }
                }
                return c;
            } else {
                System.out.println("两个数组不能相减,因为a b不是同型数组");
                return null;
            }
        }
    
        private int[][] turn(int[][] a, int x, int y) {
            int[][] c = new int[x][y];
            for (int i = 0; i < x; i++) {
                for (int j = 0; j < y; j++) {
                    c[j][i] = a[i][j];
                }
            }
            return c;
        }
    
        private int[][] cheng(int [][]a,int [][]b,int x,int y,int x1,int y1) {
            if (y==x1) {
                int[][] c = new int[x][y1];
                for (int i = 0; i < x; i++) {
                    for (int j = 0; j < y1; j++) {
                        int sum = 0;
                        for (int k = 0; k < y; k++) {
                            sum += a[i][k] * b[k][j];
                        }
                        c[i][j] = sum;
                    }
                }
                return c;
            } else {
                System.out.println("两个数组不能相乘,因为a数组的列数不等于b数组的行数");
                return null;
            }
        }
    
        private void print(int [][]c, int x, int y) {
            System.out.println("x:"+c.length);
            for (int i = 0; i < x; i++) {
                for (int j = 0; j < y; j++) {
                    System.out.print(c[i][j] + "\t");
                }
                System.out.println();
            }
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            home r = new home();
            r.assignment();
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月16日
  • 已采纳回答 12月8日
  • 创建了问题 12月8日