7-67 使用二维数组实现Matrix(矩阵)。 (60 分)

33 篇文章 4 订阅

使用二维数组实现Matrix(矩阵)。

  1. 定义Matrix(矩阵)类,要求如下:
    a) 变量:matrix(int型二维数组),row(行数),column(列数);
    b) 方法:实现两个矩阵的乘法,所有方法将返回操作后的结果矩阵。(两个矩阵的乘法:一个m×n的矩阵a(m,n)乘一个n×p的矩阵b(n,p),会得到一个m×p的矩阵c(m,p)。矩阵的行数和列数自定。)
    c) 定义构造方法。

  2. 编写主类,测试Matrix类。包括:构建对象,测试每一个方法,并将测试结果输出到屏幕上。
    输入格式:
    按下面格式输入行数、列数和矩阵:
    矩阵1:

2 3
1 2 3 
4 5 6

矩阵2:

3 2
7 8 
9 0
1 2

输出格式:
按下面格式输出乘积矩阵,每行后面有一个空格符和回车换行符:

28 14 
79 44 

输入样例:

2 3
1 2 3 
4 5 6
3 2
7 8 
9 0
1 2

输出样例:

28 14 
79 44 

写的可能有些粗糙
主要的思路就是第一个矩阵的第一行每个元素与第二个矩阵第一列的每个元素相乘并求和为新的矩阵第一行第一个的新元素,第二个的新元素为第一个矩阵的第一行每个元素与第二个矩阵第二列的每个元素相乘并求和。

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a,b;
        a= sc.nextInt();
        b= sc.nextInt();
        int[][] arr=new int[a][b];
        for (int i = 0; i < a; i++) {
            for (int j = 0; j < b; j++) {
                arr[i][j]=sc.nextInt();
            }
        }
        Matrix mat1=new Matrix(arr,a,b);
        a= sc.nextInt();
        b= sc.nextInt();
        int[][] arr1=new int[a][b];
        for (int i = 0; i < a; i++) {
            for (int j = 0; j < b; j++) {
                arr1[i][j]=sc.nextInt();
            }
        }
        Matrix mat2=new Matrix(arr1,a,b);
        Matrix out=new Matrix();
        out=Matrix.multiply(mat1,mat2);
        Matrix.input(out);
    }

		public static class Matrix{
        int r,c;
        int[][] matrix;
        public Matrix(int[][] matrix, int r, int c) {
            this.r = r;
            this.c = c;
            this.matrix = matrix;
        }

        public Matrix() {
        }

        public static Matrix multiply(Matrix m1,Matrix m2){
            Matrix mat=new Matrix(new int[m1.r][m2.c], m1.r,m2.c);
            for (int i = 0; i < m1.r; i++) {
                for (int j = 0; j < m2.c; j++) {
                    for (int k = 0; k <m1.c; k++) {
                        mat.matrix[i][j] += m1.matrix[i][k]*m2.matrix[k][j];
                    }
                }
            }
            return mat;
        }

        public static void input(Matrix mat){
            for (int i = 0; i < mat.r; i++) {
                for (int j = 0; j < mat.c; j++) {
                    System.out.print(mat.matrix[i][j]+" ");
                }
                System.out.println();
            }
        }
    }
}
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值