山科java实验2-7 利用二维数组(double[])实现一个矩阵类:Matrix

xiaoxiao2025-08-22  74

利用二维数组(double[])实现一个矩阵类:Matrix。要求提供以下方法:(1)set(int row, int col, double value):将第row行第col列的元素赋值为value;(2)get(int row,int col):取第row行第col列的元素;(3)width():返回矩阵的列数;(4)height():返回矩阵的行数;(5)Matrix add(Matrix b):返回当前矩阵与矩阵b相加后的矩阵;(6)Matrix multiply(Matrix b):返回当前矩阵与矩阵b相乘后的矩阵。(7)Matrix transpose():返回当前矩阵的转置矩阵;(8)getMax():返回矩阵中的最大值及其所在行和列;(9)print():以行和列的形式打印出当前矩阵。 package shiyan7; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub matrix2 a = new matrix2(3,4); matrix2 b = new matrix2(3,4); matrix2 c = new matrix2(4,5); for(int i = 0; i < 3; i++) { for(int j = 0; j < 4; j++) { a.set(i, j, 1); b.set(i, j, 2); } } for(int i = 0; i < 4; i++) { for(int j = 0; j < 5; j++) { c.set(i, j, i+j); } } System.out.println("矩阵A:"); a.print(); System.out.println("矩阵B:"); b.print(); System.out.println("矩阵C:"); c.print(); matrix2 apb = a.add(b); System.out.println("矩阵A+B:"); apb.print(); System.out.println("矩阵A*B:"); matrix2 bmc = b.multiply(c); bmc.print(); System.out.println("矩阵C的转置矩阵:"); matrix2 tra = c.transpose(); tra.print(); System.out.println("C的转置矩阵中的最大值及其所在行和列:"); double[] res = c.getMax(); System.out.println("最大值:"+res[2]+" 在"+ res[0] +"行,"+res[1]+"列"); } }

 

package shiyan7; public class matrix2 { public double [][]a; public matrix2(int row,int col) { this.a = new double[row][col]; } public void set(int row, int col, double value) { this.a[row][col] = value; } public double get(int row,int col) { return this.a[row][col]; } public int width()//返回列数 { return a[0].length; } public int height() { return a.length; } public matrix2 add(matrix2 m)//两矩阵相加 { /* matrix2 matrix; int row = this.a.length > m.a.length ? this.a.length :m.a.length; int col = this.a[0].length > m.a[0].length ? this.a[0].length : m.a[0].length; matrix = new matrix2(row,col); for(int i = 0;i < m.a.length;i++) { for(int j = 0;j < m.a[0].length;j++) { matrix.a[i][j] = m.a[i][j]; } } for(int i = 0;i < m.a.length;i++) { for(int j = 0;j < m.a[0].length;j++) { matrix.a[i][j] += this.a[i][j]; } } return matrix; */ matrix2 t = new matrix2(this.a.length,m.a[0].length); for(int i = 0; i < m.a.length; i++) { for(int j = 0; j < m.a[0].length; j++) { t.set(i, j, this.get(i, j) + m.get(i, j)); } } return t; } public matrix2 multiply(matrix2 m)//两矩阵相乘 { if(this.a[0].length != m.a.length) return null; matrix2 matrix = new matrix2(this.a.length,m.a[0].length); double sum = 0; for(int i = 0;i < this.a.length;i++) { for(int j = 0;j < m.a[0].length;j++) { sum = 0; for(int k = 0;k < m.a.length;k++) { sum += this.a[i][k]*m.a[k][j]; } matrix.a[i][j] = sum; } } return matrix; } public void print() { for(int i = 0;i < a.length;i++) { for(int j = 0;j < a[0].length;j++) { if(j==0) System.out.print(a[i][j]); else System.out.print(" "+a[i][j]); } System.out.println(); } System.out.println(); } public matrix2 transpose() //求转置矩阵 { matrix2 t = new matrix2(this.width(), this.height()); for(int i = 0; i <t.height(); i++) for(int j = 0; j < t.width(); j++) t.set(i, j, this.get(j, i)); return t; } public double[] getMax() { double max = this.get(0, 0); int col = 0; int row = 0; for(int i = 0; i < this.height(); i++) { for(int j = 0; j < this.width(); j++) { if(this.get(i, j) > max) { max = this.get(i, j); col = j; row = i; } } } double[] res = new double[3]; res[0] = col; res[1] = row; res[2] = max; return res; } }

 

转载请注明原文地址: https://www.6miu.com/read-5035107.html

最新回复(0)