题目要求如下:
设计程序实现矩阵的四则运算
设计要求:
(1) 实现矩阵的四则运算。
(2) 考虑实现带变元的矩阵计算。
(3)考虑实现矩阵的特征值和特征向量的计算。
我使用java语言写的
目录结构如下所示:
Matrix类是对矩阵的建模,我用一个String类型的二维数组存放矩阵的元素,除此之外还有矩阵的行数和列数两个属性。代码如下:
1 package org.java.pojo; 2 3 public class Matrix { 4 private String matrix[][]; 5 private int row; 6 private int line; 7 public String[][] getMatrix() { 8 return matrix; 9 } 10 public void setMatrix(String[][] matrix) { 11 this.matrix = matrix; 12 } 13 public int getRow() { 14 return row; 15 } 16 public void setRow(int row) { 17 this.row = row; 18 } 19 public int getLine() { 20 return line; 21 } 22 public void setLine(int line) { 23 this.line = line; 24 } 25 }
所有的调用逻辑写在在Begin.java里面,这里根据用户的选择,调用相应的方法。
具体的代码为:
1 package org.java.main; 2 3 import java.util.Scanner; 4 5 import org.java.dao.Caculate; 6 import org.java.pojo.Matrix; 7 public class Begin { 8 public static Scanner scan = new Scanner(System.in); 9 public static void main(String[] args){ 10 int chooseChar=0; 11 while(chooseChar!=5){ 12 System.out.println("请选择要执行的运算"); 13 System.out.println("1、加法\n2、减法\n3、乘法\n4、求矩阵的特征值和特征向量\n5、退出"); 14 try { 15 chooseChar=scan.nextInt(); 16 scan.nextLine();//用于处理输入结束之后的回车,否则会影响后面的输入 17 } catch (Exception e) { 18 e.printStackTrace(); 19 } 20 Begin beg=new Begin(); 21 switch(chooseChar){ 22 case 1:{ 23 beg.addOperation(); 24 break; 25 } 26 case 2:{ 27 beg.reduceOperation(); 28 break; 29 } 30 case 3:{ 31 beg.multiplyOperation(); 32 break; 33 } 34 case 4:{ 35 beg.complexOperation(); 36 break; 37 } 38 } 39 if(chooseChar==5){ 40 System.out.println("已停止工作"); 41 } 42 } 43 } 44 public static void publicPrint() { 45 System.out.println("请输入矩阵,元素之间用逗号隔开,可以有变元,输入“quit”结束,如:\n" 46 + "1,2,3\n" 47 + "2,3,4\n" 48 + "3,4,5\n" 49 + "quit"); 50 } 51 52 /** 53 * 65~90:A~Z 54 * 97~122:a~z 55 * 选择加 56 * @param list 57 */ 58 public void addOperation(){ 59 System.out.println("您选择的是矩阵的加法运算,注意两个矩阵行数和列数要相等"); 60 Caculate caculate=new Caculate(); 61 publicPrint(); 62 Matrix matrix1=caculate.inputMatrix(); 63 System.out.println("请输入下一个矩阵:"); 64 Matrix matrix2=caculate.inputMatrix(); 65 Matrix matrix=null; 66 try { 67 matrix=caculate.addOperation(matrix1, matrix2);//调用封装方法计算 68 } catch (Exception e) { 69 e.printStackTrace(); 70 } 71 System.out.println("运算结果为:"); 72 caculate.printMatrix(matrix); 73 } 74 75 /** 76 * 65~90:A~Z 77 * 97~122:a~z 78 * 选择减 79 * @param list 80 */ 81 public void reduceOperation(){ 82 System.out.println("您选择的是矩阵的减法运算,注意两个矩阵行数和列数要相等"); 83 Caculate caculate=new Caculate(); 84 publicPrint(); 85 Matrix matrix1=caculate.inputMatrix(); 86 System.out.println("请输入下一个矩阵:"); 87 Matrix matrix2=caculate.inputMatrix(); 88 Matrix matrix=null; 89 try { 90 matrix=caculate.reduceOperation(matrix1, matrix2);//调用封装方法计算 91 } catch (Exception e) { 92 e.printStackTrace(); 93 } 94 System.out.println("运算结果为:"); 95 caculate.printMatrix(matrix); 96 } 97 98 /** 99 * 65~90:A~Z 100 * 97~122:a~z 101 * 选择乘 102 * @param list 103 */ 104 public void multiplyOperation(){ 105 System.out.println("您选择的是矩阵的乘法运算,注意第一个矩阵的列数要和第二个矩阵的行数相等"); 106 Caculate caculate=new Caculate(); 107 publicPrint(); 108 Matrix matrix1=caculate.inputMatrix(); 109 System.out.println("请输入下一个矩阵:"); 110 Matrix matrix2=caculate.inputMatrix(); 111 Matrix matrix=null; 112 try { 113 matrix=caculate.multiplyOperation(matrix1, matrix2);//调用封装方法计算 114 } catch (Exception e) { 115 e.printStackTrace(); 116 } 117 System.out.println("运算结果为:"); 118 caculate.printMatrix(matrix); 119 } 120 /** 121 * 65~90:A~Z 122 * 97~122:a~z 123 * 选择特征值特征向量 124 * @param list 125 */ 126 public void complexOperation(){ 127 System.out.println("您选择的是计算矩阵的特征值特征向量"); 128 Caculate caculate=new Caculate(); 129 publicPrint(); 130 Matrix matrix=caculate.inputMatrix(); 131 System.out.println("运算结果为:"); 132 MatrixEigenValue.caculateEigen(matrix.getMatrix()); 133 } 134 135 136 }