实体层:
package com.meession.practice.day0726.entity; /** * A matrix class which contains all attributes of matrix. * @author fzh * */ public class Matrix { /** * 矩阵的行数 */ private int rows; /** * 矩阵的列数 */ private int cols; /** * 存储矩阵的数据的二维数组 */ private int[][] data; public Matrix(){} public Matrix(int rows,int cols){ this.rows = rows; this.cols = cols; this.data = new int[this.rows][this.cols]; } public int getRows() { return rows; } public void setRows(int rows) { this.rows = rows; } public int getCols() { return cols; } public void setCols(int cols) { this.cols = cols; } public int[][] getData() { return data; } public void setData(int[][] data) { this.data = data; } }
服务层:
package com.meession.practice.day0726.service; import java.util.Random; import com.meession.practice.day0726.entity.Matrix; public class MatrixService{ Random r = new Random(); /** * 生成多个矩阵 * @return 矩阵数组 */ public Matrix[] generateMatrixs(){ /** * 随机生成的矩阵个数 */ int n = r.nextInt(4) + 3; Matrix[] matrixs = new Matrix[n]; /** * 第一个矩阵的行数和列数随机产生 */ matrixs[0] = new Matrix(r.nextInt(6)+1,r.nextInt(6)+1); for(int i=1;i<matrixs.length;i++){ /** * 第二个及以后的矩阵,行数与它前一个相等。 */ matrixs[i] = new Matrix(matrixs[i-1].getCols(),r.nextInt(6)+1); } return matrixs; } /** * 赋值 * @param matrix 被赋值的矩阵 */ public void evaluate(Matrix matrix){ int[][] data = new int[matrix.getRows()][matrix.getCols()]; for(int i=0;i<matrix.getRows();i++){ for(int j=0;j<matrix.getCols();j++){ data[i][j] = r.nextInt(6); } } matrix.setData(data); } /** * 两个矩阵相乘 * @param matrixA 第一个矩阵 * @param matrixB 第二个矩阵 * @return */ public Matrix multiply(Matrix matrixA,Matrix matrixB){ Matrix matrix = new Matrix(); int[][] data = new int[matrixA.getRows()][matrixB.getCols()]; for(int i=0;i<matrixA.getRows();i++){ for(int j=0;j<matrixB.getCols();j++){ for(int k=0;k<matrixB.getRows();k++){ data[i][j] += matrixA.getData()[i][k] * matrixB.getData()[k][j]; } } } matrix.setData(data); matrix.setRows(matrixA.getRows()); matrix.setCols(matrixB.getCols()); return matrix; } /** * 输入矩阵的数据 * @param matrix 要被打印输出的矩阵 */ public void print(Matrix matrix){ for(int i=0;i<matrix.getRows();i++){ for(int j=0;j<matrix.getCols();j++){ System.out.printf("%8d",matrix.getData()[i][j]); } System.out.println(); } } }
单元测试:
package com.meession.practice.day0726.test; import org.junit.Test; import com.meession.practice.day0726.entity.Matrix; import com.meession.practice.day0726.service.MatrixService; public class MatrixServiceTest { MatrixService matrixService = new MatrixService(); @Test public void generateMatrixsTest(){ Matrix[] matrixs = matrixService.generateMatrixs(); } @Test public void evaluateTest(){ Matrix matrix = new Matrix(5,5); matrixService.evaluate(matrix); } @Test public void multiplyTest(){ Matrix matrix1 = new Matrix(5,7); matrixService.evaluate(matrix1); Matrix matrix2 = new Matrix(7,6); matrixService.evaluate(matrix2); Matrix matrix = matrixService.multiply(matrix1, matrix2); } }
main方法测试:
package com.meession.practice.day0726.test; import com.meession.practice.day0726.entity.Matrix; import com.meession.practice.day0726.service.MatrixService; public class MatrixServiceDemo { public static void main(String[] args) { MatrixServiceDemo msd = new MatrixServiceDemo(); msd.start(); } public void start(){ MatrixService matrixService = new MatrixService(); /** * 生成多个矩阵 */ Matrix[] matrixs = matrixService.generateMatrixs(); /** * 为多个矩阵赋值 */ for(int i=0;i<matrixs.length;i++){ matrixService.evaluate(matrixs[i]); } /** * 输入每一个矩阵的数据 */ for(int i=0;i<matrixs.length;i++){ System.out.println("第"+(i+1)+"个矩阵为:"); matrixService.print(matrixs[i]); } /** * 将多个矩阵依次相乘,并且输入过程中的矩阵和结果矩阵。 */ Matrix matrix = null; matrix = matrixService.multiply(matrixs[0], matrixs[1]); System.out.println("过程1:"); matrixService.print(matrix); for(int i=2;i<matrixs.length;i++){ matrix = matrixService.multiply(matrix, matrixs[i]); if(i<matrixs.length - 1){ System.out.println("过程" + i + ":"); matrixService.print(matrix); } } /** * 清理矩阵相称过程中产生的矩阵 */ System.gc(); System.out.println("所有矩阵相乘最后的结果为:"); matrixService.print(matrix); } }