java 矩阵运算_java语言编写矩阵的四则运算

这个Java程序实现了从用户输入创建矩阵,并进行加、减、乘运算。它包括读取用户输入,处理矩阵的行和列,以及执行矩阵的四则运算。当矩阵的行和列不匹配时,程序会抛出异常。
摘要由CSDN通过智能技术生成

1 packageorg.java.dao;2

3 importjava.util.ArrayList;4 importjava.util.Scanner;5

6 importorg.java.pojo.Matrix;7

8 public classCaculate {9 /**

10 * 从输入到创建一个矩阵11 *@return

12 */

13 publicMatrix inputMatrix(){14 @SuppressWarnings("resource")15 Scanner scan = newScanner(System.in);16 ArrayList list=new ArrayList();//用来存放用户的输入

17 String firstString=scan.nextLine();18 while(!firstString.equals("quit")){19 if(!"".equals(firstString))20 list.add(firstString);21 firstString=scan.nextLine();22 }23 int row=list.size();//获得矩阵的行数

24 int line=list.get(0).split(",").length;//获得矩阵列数

25 for(int i=1;i

38 String tempString[]=string.split(",");39 for(String str : tempString) {40 matrixString[i][j]=str.trim();//删除空格

41 ++j;42 }43 if(j==line)44 j=0;45 ++i;46 }47 matrix.setMatrix(matrixString);48 returnmatrix;49 }50

51 /**

52 * 输出矩阵53 *@parammatrix54 */

55 public voidprintMatrix(Matrix matrix){56 String matrixString[][]=matrix.getMatrix();57 for(int i=0;i

65 /**

66 * 矩阵加法67 *@parammatrix168 *@parammatrix269 *@return

70 *@throwsException71 */

72 @SuppressWarnings("null")73 public Matrix addOperation(Matrix matrix1,Matrix matrix2) throwsException{74 //如果输入有误,则停止运算

75 if(matrix1==null){76 throw newException();77 }78 //如果输入有误,则停止运算

79 if(matrix2==null){80 throw newException();81 }82 //计算---首先判断一下两个矩阵行和列的关系是否可以计算

83 if(matrix1.getRow()!=matrix2.getRow()||matrix1.getLine()!=matrix2.getLine()){84 System.out.println("两个矩阵行不满足运算要求");85 throw newException();86 }87 Matrix matrix=newMatrix();88 matrix.setRow(matrix1.getRow());89 matrix.setLine(matrix1.getLine());90 //执行运算

91 String[][]matString1=matrix1.getMatrix();92 String[][]matString2=matrix2.getMatrix();93 String[][]matString=new String[matrix.getRow()][matrix.getLine()];//结果矩阵的数组

94 for(int i=0;i

101 float result=Float.parseFloat(matString1[i][j])+Float.parseFloat(matString2[i][j]);102 matString[i][j]=String.valueOf(result);103 }104 }105

106 }107 matrix.setMatrix(matString);108 returnmatrix;109 }110 /**

111 *112 * 减113 *@parammatrix1114 *@parammatrix2115 *@return

116 *@throwsException117 */

118 public Matrix reduceOperation(Matrix matrix1,Matrix matrix2)throwsException{119 //如果输入有误,则停止运算

120 if(matrix1==null){121 throw newException();122 }123 //如果输入有误,则停止运算

124 if(matrix2==null){125 throw newException();126 }127 //计算---首先判断一下两个矩阵行和列的关系是否可以计算

128 if(matrix1.getRow()!=matrix2.getRow()||matrix1.getLine()!=matrix2.getLine()){129 System.out.println("两个矩阵行不满足运算要求");130 throw newException();131 }132 Matrix matrix=newMatrix();133 matrix.setRow(matrix1.getRow());134 matrix.setLine(matrix1.getLine());135 //执行运算

136 String[][]matString1=matrix1.getMatrix();137 String[][]matString2=matrix2.getMatrix();138 String[][]matString=new String[matrix.getRow()][matrix.getLine()];//结果矩阵的数组

139 for(int i=0;i

146 float result=Float.parseFloat(matString1[i][j])-Float.parseFloat(matString2[i][j]);147 matString[i][j]=String.valueOf(result);148 }149 }150

151 }152 matrix.setMatrix(matString);153 returnmatrix;154 }155

156 /**

157 * 乘158 *@parammatrix1159 *@parammatrix2160 *@return

161 *@throwsException162 */

163 public Matrix multiplyOperation(Matrix matrix1,Matrix matrix2)throwsException{164 //如果输入有误,则停止运算

165 if(matrix1==null){166 throw newException();167 }168 //如果输入有误,则停止运算

169 if(matrix2==null){170 throw newException();171 }172 //计算---首先判断一下两个矩阵行和列的关系是否可以计算

173 if(matrix1.getLine()!=matrix2.getRow()){174 System.out.println("两个矩阵行不满足运算要求");175 throw newException();176 }177 Matrix matrix=newMatrix();178 matrix.setRow(matrix1.getRow());//结果矩阵行数等于第一个矩阵行数,列数等于第二个矩阵列数

179 matrix.setLine(matrix2.getLine());180 //执行运算

181 String[][]matString1=matrix1.getMatrix();182 String[][]matString2=matrix2.getMatrix();183 String[][]matString=new String[matrix.getRow()][matrix.getLine()];//结果矩阵的数组

184 int sameNum=matrix1.getLine();//=matrix2.getRow()

185 for(int i=0;i

192 }193 }194 matrix.setMatrix(matString);195 returnmatrix;196 }197

198 /**

199 * 把形如“1*1+2*1+3*1+”的式子进行分析计算200 * 返回处理结果201 *@paramtoAnalizeString202 *@return

203 */

204 publicString doAnalyze(String toAnalizeString){205 String disAdd[]=toAnalizeString.split("\\+");//“+”是转义字符

206 int addLength=disAdd.length;//获取有几项相加

207 String disMul[][]=new String[addLength][2];//所有项都在这一个二维数组里面了

208 for (int i = 0; i < disAdd.length; i++) {209 disMul[i]=disAdd[i].split("\\*");210 }211 //移项,先不考虑系数为0的情况

212 for(int i = 0; i < disMul.length; i++){213

214 if(isNumber(disMul[i][0])){215 if(isNumber(disMul[i][1])){216 //都是数字,让第一项等于两数运算结果,第二项等于0

217 float result=Float.parseFloat(disMul[i][0])*Float.parseFloat(disMul[i][1]);218 disMul[i][0]=String.valueOf(result);219 disMul[i][1]="0";220 }else{221 //一是二不是,不用做什么

222 }223 }else{224 if(isNumber(disMul[i][1])){225 //一不是二是,互换

226 String tempString=disMul[i][0];227 disMul[i][0]=disMul[i][1];228 disMul[i][1]=tempString;229 }else{230 //都不是数字,让第一项等于1,第二项等于两数运算结果

231 if(disMul[i][0].equals(disMul[i][1])){232 disMul[i][1]=disMul[i][1]+"^2";233 }else{//按abc顺序写

234 if(disMul[i][0].compareTo(disMul[i][1])>0){235 disMul[i][1]=disMul[i][1]+""+disMul[i][0];236 }else{237 disMul[i][1]=disMul[i][0]+""+disMul[i][1];238 }239 }240 disMul[i][0]="1";241 }242 }243 }//移项完成244

245 //合并同类项,算法会处理系数为0的情况

246 for(int i = 0; i < disMul.length-1; i++){247 for(int j=i+1;j

250 disMul[i][0]=String.valueOf(Float.parseFloat(disMul[i][0])+Float.parseFloat(disMul[j][0]));251 disMul[j][0]="0";252 }253 }254 }255 }//合并同类项完成256

257 //写成多项式的形式,用result拼接

258 String result="";259 for(int i = 0; i < disMul.length; i++){260 if(!disMul[i][0].equals("0")){//忽略为0的项

261 if(disMul[i][1].equals("0")){//如果是常数项

262 result+=disMul[i][0]+"+";263 }else{264 result+=disMul[i][0]+disMul[i][1]+"+";265 }266 }267 }268 result=result.substring(0, result.length()-1);//删除最后一个“+”号

269 returnresult;270 }271

272 /**

273 * 判断矩阵的一个元素是字母还是数字274 *@paramstr275 *@return

276 */

277 public booleanisNumber(String str){278 for (int i = 0; i < str.length(); i++){279 if (!Character.isDigit(str.charAt(i))){280 return false;281 }282 }283 return true;284 }285 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值