矩阵运算 构造方法

该博客介绍了如何在Java中创建一个矩阵类,包括行数、列数和二维数组存储数据。文章涵盖了矩阵的构造方法,以及如何实现矩阵的数乘、加法、减法和两个矩阵之间的乘法操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Q:编写一个Java程序,实现矩阵类,至少包含三个属性:行数,列数,存储数据的二维数组;至少两个构造函数,实现矩阵的数乘,加法,减法以及两个矩阵的乘法。

package yh_juzhen;import java.util.Scanner;
/*编写一个Java程序,实现矩阵类,至少包含三个属性:行数,列数,存储数据的二维数组;至少两个构造函数,实现矩阵的数乘,加法,减法以及两个矩阵的乘法。*/
public class juzhen {		
private int row;		
private int col;		
int data[][];		
//  三个属性    其中data用于存储二维数组				

//三个构造函数		
public juzhen() {		//无参构造函数  空的以便以后使用	
	}		
	public juzhen(int row, int col) {			
	// 根据用户输入构造矩阵 即构造行列的		
	}		
	public juzhen(int data[][]) {// 根据传入的二维数组构建矩阵			             
	this.row = data.length;
	//row的值为传过来矩阵的行数			
	this.col = data[0].length;			
	this.data = new int[row][col];		
	for (int i = 0; i < this.row; i++)//for循环赋值给date  			
	for (int j = 0; j < this.col; j++) {					
	this.data[i][j] = data[i][j];				
	}		
	}						

//打印数据   输出函数		
public void print() {//输出传过来的矩阵           
 for (int i = 0; i < this.row; i++) {				
  for (int j = 0; j < this.col; j++) {					
  System.out.print(" " + this.data[i][j]);				
  }				
  System.out.println();//一行之后回车		
  	}		
  	}						

//get set 方法  获取矩阵属性行数列数
		public int getRow() {
			return row;
		}

		public void setRow(int row) {
			this.row = row;
		}

		public int getCol() {
			return col;
		}

		public void setCol(int col) {
			this.col = col;
		}

		public int[][] getData() {
			return data;
		}

		public void setData(int[][] data) {
			this.data = data;
		}

//利用函数  获取第i行j列的元素
		public int get(int i, int j) {
			return this.data[i][j];//仍用this获取这个矩阵的数据
		}

//矩阵加法  c[i][j]= a[i][j]+b[i][j]		
public static juzhen add(juzhen a, juzhen b) {
// 矩阵加法    结果返回给矩阵c   传过来对象的加法			
juzhen c = null;//先给矩阵c设为空			
if (a.getRow() != b.getRow() || a.getCol() != b.getCol()) {
//矩阵a b不同行或不同列   且利用get set 函数				
System.out.println("不是同型矩阵,不能相加");				return c;			
}			
int[][] data = new int[a.getRow()][a.getCol()];
//仍用原来的构造函数用data  并给它分配大小			
for (int i = 0; i < a.getRow(); i++)//做循环 进行相加				
for (int j = 0; j < a.getCol(); j++) {				
	data[i][j] = a.get(i, j) + b.get(i, j);					
	/*不用data[i][j] = a.data[i][j] + b.data[i][j] 					因为为私有  要获取i行j列的元素的数据  创建函数get(int i,int j)*/				
	}			
	c = new juzhen(data);//将data给矩阵c			return c;		
	}

//矩阵减法 c[i][j]= a[i][j]-b[i][j]
		public static juzhen subtract(juzhen a, juzhen b) {// 矩阵加法    结果返回给矩阵e   传过来对象的减法
			juzhen e = null;//先给矩阵e设为空
			if (a.getRow() != b.getRow() || a.getCol() != b.getCol()) {//矩阵a b不同行或不同列   且利用get set 函数
				System.out.println("不是同型矩阵,不能相加");
				return e;
			}
	int[][] data = new int[a.getRow()][a.getCol()];//仍用原来的构造函数 用data  并给它分配大小
			for (int i = 0; i < a.getRow(); i++)//做循环 进行相加
				for (int j = 0; j < a.getCol(); j++) {
					data[i][j] = a.get(i, j) - b.get(i, j);
				}
			e = new juzhen(data);//将data给矩阵e
			return e;
		}


//矩阵的数乘   c[i][j]= a[i][j]*h
		public static juzhen shucheng(juzhen a, int h) {
			juzhen f = null;//先给矩阵f设为空
			int[][] data = new int[a.getRow()][a.getCol()];//仍用原来的构造函数 用data  并给它分配大小
			for (int i = 0; i < a.getRow(); i++)//做循环 进行相加
				for (int j = 0; j < a.getCol(); j++) {
					data[i][j] = a.get(i, j) *h;
				}
			f = new juzhen(data);//将data给矩阵f
			return f;
		}

//矩阵乘法  
		public static juzhen multiply(juzhen a, juzhen b) {//传过来对象
			juzhen d=null;//先设矩阵d为空
			if(a.getCol() !=b.getRow())//判是否可以相乘
			{
				System.out.println("矩阵不能相乘");
				return d;
			}
			int [][]data = new int [a.getRow()][b.getCol()];//给data分配空间  a的行数 b的列数  data暂存数据
			for (int i =0 ;i< a.getRow();i++)
				for(int j = 0; j< b.getCol();j++)
					for(int k =0; k < a.getCol();k++)
					{
						data[i][j]=data[i][j]+a.get(i, k)*b.get(k, j);//矩阵乘法运算
					}
		
		   d= new juzhen(data);//将矩阵给d
			return d;//返回矩阵d	
		}
	}

class test {
	public static void main(String[] args) {

		int a[][] = { { 1, 2, 3 }, { 2, 3, 4 }, { 2, 1, 3 } };
		juzhen ma = new juzhen(a);//将矩阵a传过去
		System.out.println("矩阵a为:");
		ma.print();//输出矩阵a
		System.out.println("\n");//回车进行隔开
		int b[][]=  { { 1, 2, 3 }, { 2, 3, 4 }, { 2, 1, 3 } };
		juzhen mb = new juzhen(b);
		System.out.println("矩阵b为:");
		mb.print();	
		System.out.println("\n");

//输入h的值  进行数乘运算
		Scanner input = new Scanner(System.in);    
		System.out.println("请输入h的值:");    
		int h = input.nextInt();  
		System.out.println("\n");
		
		System.out.println("矩阵a与数h相乘结果为:");
		juzhen mf = juzhen.shucheng(ma, h);
		mf.print();
		System.out.println("\n");
		
		System.out.println("矩阵b与数h相乘结果为:");
		juzhen mg = juzhen.shucheng(mb, h);
		mf.print();
		System.out.println("\n");

juzhen mc =juzhen.add(ma, mb);
		System.out.println("矩阵相加结果为:");
		mc.print();//输出mc
		System.out.println("\n");
		
		System.out.println("矩阵相减结果为:");
		juzhen me = juzhen.subtract(ma, mb);
		me.print();
		System.out.println("\n");
		
		System.out.println("矩阵相乘结果为:");
		juzhen md = juzhen.multiply(ma, mb);
		md.print();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值