矩阵java_数据结构学习----矩阵(Java实现)

packagecom.clarck.datastructure.matrix;/*** 矩阵类

*

*@authorclarck

**/

public classMatrix {/*** 存储矩阵元素的二维数组*/

private intelement[][];/*** 构造m*n零矩阵

*@paramm

*@paramn*/

public Matrix(int m, intn) {//若m或n为负数,Java将抛出负数组长度异常NegativeArrayException

this.element = new int[m][n];

}/*** 深拷贝

*@parammat*/

publicMatrix(Matrix mat) {this(mat.element.length, mat.element[0].length, mat.element);

}/*** 构造n*n零矩阵

*@paramn*/

public Matrix(intn) {this(n, n);

}/*** 返回当前矩阵与mat相加后的矩阵,不改变当前矩阵,=this+mat,各对应元素相加

*@parammat

*@return

*/

publicMatrix plus(Matrix mat) {

Matrix matc= new Matrix(this); //深拷贝

matc.add(mat);return matc; //返回对象引用

}/*** 构造m*n矩阵,由mat提供元素

*@paramm

*@paramn

*@parammat*/

public Matrix(int m, int n, intmat[][]) {this(m, n);for (int i = 0; i < mat.length && i < m; i++) {for (int j = 0; j < mat[i].length && j < n; j++) {this.element[i][j] =mat[i][j];

}

}

}/*** 返回矩阵第i行,第j列元素值 O(1)

*@parami

*@paramj

*@return

*/

public int get(int i, intj) {//若i,j下标越界,Java将抛出数组下标越界异常ArrayIndexOutOfBoundsException

return this.element[i][j];

}/*** 设置矩阵第i行第j列的元素值为value O(1)

*@parami

*@paramj

*@paramvalue*/

public void set(int i, int j, intvalue) {this.element[i][j] =value;

}/*** 返回矩阵所有元素的描述字符串,行主序遍历*/@OverridepublicString toString() {

String str= " 矩阵 " + this.getClass().getSimpleName() + " (" + this.element.length + " * " + this.element[0].length + ") :\n";for (int i = 0; i < this.element.length; i++) {for (int j = 0; j < this.element[i].length; j++) {

str+= String.format("%4d", this.element[i][j]);

}

str+= "\n";

}returnstr;

}/*** 当前矩阵与mat矩阵相加,this += mat, 各对应元素相加;改变当前矩阵

*@parammat*/

public voidadd(Matrix mat) {if (this.element.length != mat.element.length ||

this.element[0].length != mat.element[0].length)throw new IllegalArgumentException("两个矩阵阶数不同,不能相加");for (int i = 0; i < this.element.length; i++) {for (int j = 0; j < this.element[i].length; j++) {this.element[i][j] +=mat.element[i][j];

}

}

}/*** 比较两个同阶矩阵是否相等*/

public booleanequals(Object obj) {if (this ==obj)return true;if (!(obj instanceofMatrix))return false;

Matrix mat=(Matrix) obj;if (this.element.length !=mat.element.length|| this.element[0].length != mat.element[0].length)return false;for (int i = 0; i < this.element.length; i++)for (int j = 0; j < this.element[i].length; j++)if (this.element[i][j] !=mat.element[i][j])return false;return true;

}/*** 返回当前矩阵的转置矩阵

*@return

*/

publicMatrix transpose() {//构造零矩阵

Matrix trans = new Matrix(this.element[0].length, this.element.length);for (int i = 0; i < this.element.length; i++)for (int j = 0; j < this.element[i].length; j++)

trans.element[j][i]= this.element[i][j];returntrans;

}/*** 判断当前矩阵是否为上三角矩阵

*@return

*/

public booleanisUpTriangular() {if (this.element.length != this.element[0].length)return false;for (int i = 0; i < this.element.length; i++)for (int j = 0; j < i; j++)//下三角元素为0

if (this.element[i][j] != 0)return false;return true;

}/*** 判断当前矩阵是否为下三角矩阵

*@return

*/

public booleanisDownTriangular() {if (this.element.length != this.element[0].length)return false;for (int i = 0; i < this.element.length; i++)for (int j = i; j < this.element.length; j++)//上三角元素为0

if (this.element[i][j] != 0)return false;return true;

}/*** 判断当前矩阵是否为对称矩阵

*@return

*/

public booleanisSymmetric() {if (this.element.length != this.element[0].length)return false;for (int i = 0; i < this.element.length; i++)for (int j = 0; j < this.element[i].length; j++)if (this.element[i][j] != this.element[j][i])return false;return true;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值