PTA 7-2 编程题-使用二维数组实现Matrix(矩阵)

  1. 定义Matrix(矩阵)类,要求如下:
    a) 静态变量:static Scanner reader=new Scanner(System.in);

    b) 变量:row(行数),column(列数),matrix(int型二维数组);

    c) 根据需求定义构造方法;

    d) 方法:

     1) inputMatrix方法:从键盘读入行数和列数,创建矩阵的二维数组,然后从键盘读入矩阵的元素值;
     2) multiply方法:两个矩阵相乘,方法将返积矩阵;
     3) display方法:将矩阵输出到屏幕
  1. 编写Main类,测试Matrix类: 从键盘读入行数、列数和元素值,分别构建2个Matrix对象,将2个Matrix对象相乘,并将乘积矩阵输出到屏幕上。
    
    

输入格式:

2 3
1 2 3
4 5 6

输出格式:

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) {
		matrix m1=new matrix();			
		m1.inputMatrix();
		
		matrix m2=new matrix();
		m2.inputMatrix();
        //创建两个matrix对象
		
		matrix m3= m1.multiply(m2);//两个matrix对象相乘,结果赋给matrix对象m3
		m3.display();//输出
	}
}

class matrix{
	int row,column;//行,列
	int[][] m;//存储矩阵的二维数组
	static Scanner reader=new Scanner(System.in);//为后面输入做准备
	
	matrix(){
	}
	
	matrix(int a,int b,int[][] c){//构造方法,将在multiply()方法里使用
		row=a;
		column=b;
		m=c;
	}
	
	public void inputMatrix(){//输入矩阵
		row=reader.nextInt();
		column=reader.nextInt();
		m=new int [row][column];
		for(int i=0;i<row;i++) {
			for(int j=0;j<column;j++) {
				m[i][j]=reader.nextInt();
			}
		}
        
	}
	
	public matrix multiply(matrix m2){//矩阵的乘法
		int[][] a=new int[row][m2.column];//用于存储结果的二维数组
		for(int i=0;i<row;i++) {//循环第一个矩阵的每一行
			for(int k=0;k<m2.column;k++) {//循环第二个矩阵的每一列
				for(int j=0;j<column;j++) {//对应具体行,具体列的每一个数,相乘并累加。
					a[i][k]=a[i][k]+m[i][j]*m2.m[j][k];
				}
			}
		}
		matrix m3=new matrix(row,m2.column,a);//构造结果矩阵并返回
		return m3;
	}
	
	public void display() {//输出,注意格式,不是以空格结尾
		for(int i=0;i<row;i++) {
			for(int j=0;j<column;j++) {
                if(j==0)
				    System.out.printf("%d",m[i][j]);
                else
                    System.out.printf(" %d",m[i][j]);
			}
			System.out.println();
		}
	}
}

满意的话就赏个赞叭 ->__<-

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值