Java实现行列式计算

编程入门 行业动态 更新时间:2024-10-26 11:16:47

Java实现<a href=https://www.elefans.com/category/jswz/34/1750346.html style=行列式计算"/>

Java实现行列式计算

Java实现行列式计算(简单使用)

运行RowLineFormula中的main函数后,按照提示进行输入要进行运算的数据即可.
文件名要命名为 RowLineFormula

import java.lang.reflect.Method;
import java.util.Scanner;/*** @author yiran* @creat 2021-11-23-13:23*/
// 实现行列式的计算
public class RowLineFormula {// 处理nextLine() 第一次自动读回车的缺陷private boolean flag=true;// 由于需要输入数据,设置一个全局的输入流private Scanner scan;// 由于行列式是二维的,所以使用 二维数组进行存储// 数据类型可能出现浮点private double [][] arr;// 储存阶数private int size;public RowLineFormula() {// 初始化输入流scan=new Scanner(System.in);}// 使用行列展开进行计算的原理public void rlExpanding(){// 调用递归函数进行计算,要进行多次数的复制,存在较大的优化空间double result = core(size,arr);
//        System.out.println("running...");System.out.println("行列式的计算结果为: "+result);}// 行列式展开方法计算行列式 使用递归public double core(int rank,double[][]a) {if (rank>2){// ----------------核心代码--------------------double result=0;for (int k=0;k<rank;k++){// 取出余子式double [][]newArr=new double[rank-1][rank-1];int index=0;// 对数组进行赋值for (int i=0;i<rank;i++){if (k!=i){for (int j=1;j<rank;j++){// 如果该行不等于所在行newArr[index][j-1]=a[i][j];}// 到第下一行赋值index++;}}// 重点注意  由于此处取的是  a11 所以 (-1)^(1+1) = 1  可以进行处理result+=Math.pow(-1,(k+1+1))*a[k][0]*core(rank-1,newArr);}// --------------------------------------return result;}else{// 二级行列式计算return a[0][0]*a[1][1]-a[0][1]*a[1][0];}}// 业务处理层public void service(String method) throws Exception {while(true){int row = readRow();if (row!=0){// 初始化成功// 数据的输入while (readData(row)){// 数据录入成功,可以进行计算// 通过反射,获取method方法进行计算  jdk1.8以上可以使用try {Class<RowLineFormula> clazz= RowLineFormula.class;Method m=clazz.getMethod(method);if(m!=null){m.invoke(this);System.out.println("-------------------------------------");System.out.print("是否继续计算(输入0继续):");if (scan.nextInt()!=0){System.exit(0);}else{break;}}} catch (Exception e) {// 调用反射是出错return;}}};}}// 输入行列式的阶数 限制行列的大小为20以内public int readRow() throws Exception{System.out.println("-------------------------RowLineFormula----------------------------");System.out.print("请输入要计算的行列式的阶数:");int row = scan.nextInt();size=row;// 限制只能计算20阶以内的行列式if (row>1&&row<=20){// 初始化  数据arr=new double[row][row];return row;}return 0;}/*** 读取数据* @return 判断用户是否选择退出程序,并进行重新操作*/public boolean readData(int row){try {System.out.println("输入行列式的数据(输入一行之后回车,每个数据之间使用空格进行分隔):");// 处理nextLine() 第一次自动读回车的缺陷
//            if (flag)
//            {
//                scan.nextLine();
//                flag=false;
//            }scan.nextLine();for (int i=0;i<row;i++){System.out.print("第"+(i+1)+"行: ");String line= scan.nextLine();String[] data = line.trim().split(" ");if (data.length!=row){System.out.println("数据输入格式错误,请重新输入(从第1行开始):");i=-1;}else{for (int j=0;j<row;j++){// 此处可能会报错,由于用户输入的错误信息arr[i][j]=Double.parseDouble(data[j]);}}}System.out.println("数据输入录入成功,正在计算行列式,请等待...");} catch (NumberFormatException e) {// 数据输入错误,进行处理System.out.println("输入的数据有误,正在重新执行输入函数...");return false;}return true;}// main函数的作用为分发,以及接受参数 初始public static void main(String[] args) {RowLineFormula rowLineFormula =new RowLineFormula();String method="rlExpanding";if (args!=null&&args.length>0&&args[0]!=null && "".equals(args[0])){method=args[0];}try {rowLineFormula.service(method);} catch (Exception e) {// 出现错误进行统一处理// 直接判断可能出现的错误为   输入的参数有误System.out.println("启动失败,请检查输入命令的参数是否有误");}}
}

运行环境要求 JDK8以上

  1. 编译. 要指定-encoding为utf-8 并且要将文件的编码设置为utf-8, 否则会报乱码错误
  javac -encoding utf-8 RowLineFormula .java
  1. 运行
java RowLineFormula

测试:

更多推荐

Java实现行列式计算

本文发布于:2024-03-04 20:58:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1710400.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:行列式   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!