提示输入方程时输入如:5x+3y=2 要求全部字符串无空格
1 package cn.aikang.Calculation; 2 3 import java.math.BigDecimal; 4 import java.util.Scanner; 5 //BigDecimal 6 /** 7 * @Description: TODO(这里用一句话描述这个类的作用) 8 * @Author aikang 9 * @Date 2019/10/12 8:38 10 */ 11 public class EquationCalculation { 12 13 // 主方法 14 public static void main(String[] args) { 15 //1. 调用用户输入方法接收得到的数组 16 String[] UserScannerArr = UserScanner(); 17 //["5x+3y=2","3x+2y=1"] 18 19 //2. 调用分割功能 20 double[][] doubles1 = ExtractUserArr(UserScannerArr); 21 22 //3.调用计算功能返回第一个式子xy的值 23 double[] doubles2 = CalculationXY(doubles1); 24 25 //4.调用最后结果判断功能 26 boolean result = Result(doubles1, doubles2); 27 //做判断看式子是否成立 28 if(result){ 29 System.out.println("结果为:"); 30 System.out.println("x:"+doubles2[0]+"y"+doubles2[1]); 31 }else{ 32 System.out.println("此方法无解"); 33 } 34 35 } 36 37 //1. 实现用户输入功能 38 public static String[] UserScanner(){ 39 // 1.1 创建一个String类型的二维数组用来返回用户输入 40 String[] ScannerArr = new String[2]; 41 Scanner scanner = new Scanner(System.in); 42 // 1.2 循环ScannerArr的长度让用户输入 43 for (int i = 0; i < ScannerArr.length; i++) { 44 //提示用户输入 45 System.out.println("请输入第"+(i+1)+"个方程"); 46 //让用户输入方程组 47 ScannerArr[i] = scanner.nextLine(); 48 } 49 return ScannerArr; 50 } 51 52 //2.实现用户传入数组做分割提取系数和等值返回 53 public static double[][] ExtractUserArr(String[] userArr){ 54 //1.创建一个二维数组用来存储提取出来的系数第一个数组存储第一个方程的系数:x的系数y的系数等值 55 double[][] userXYxxcc = new double[2][3]; 56 57 //2. for循环userArr数组处理两个方程 58 for (int i = 0; i < userArr.length; i++) { 59 //3.使用x分割传入对应位置 60 String[] xes1 = userArr[i].split("x"); 61 //3.1 判断提取出来的是否是空,如果是则赋值1 62 if (xes1[0] == null || "".equals(xes1[0])){ 63 userXYxxcc[i][0] = 1; 64 }else if(xes1[0] == "-"){ 65 userXYxxcc[i][0] = -1; 66 }else { 67 userXYxxcc[i][0] = Double.parseDouble(xes1[0]); 68 } 69 70 //4. 使用y继续分割xes[1]得到xes2 71 String[] xes2 = xes1[1].split("y"); 72 if (xes2[0] == null || "".equals(xes2[0])){ 73 userXYxxcc[i][1] = 1; 74 }else if(xes2[0] == "-"){ 75 userXYxxcc[i][1] = -1; 76 }else { 77 userXYxxcc[i][1] = Double.parseDouble(xes2[0]); 78 } 79 80 //使用xes2[]=分割得到等值 81 String[] xes3 = xes2[1].split("="); 82 userXYxxcc[i][2] = Double.parseDouble(xes3[1]); 83 } 84 return userXYxxcc; 85 } 86 87 //3. 实现传入数组计算出x,y的值 88 public static double[] CalculationXY(double[][] CcArr){ 89 //1.定义数组存储xy 90 double[] xy = new double[2]; 91 //1.1创建//BigDecimal用来运算 92 BigDecimal x1 = new BigDecimal(CcArr[0][0]); 93 BigDecimal y1 = new BigDecimal(CcArr[0][1]); 94 BigDecimal e1 = new BigDecimal(CcArr[0][2]); 95 BigDecimal x2 = new BigDecimal(CcArr[1][0]); 96 BigDecimal y2 = new BigDecimal(CcArr[1][1]); 97 BigDecimal e2 = new BigDecimal(CcArr[1][2]); 98 //2.定义变量计算公约 99 BigDecimal x1_1 = x1.multiply(y2); 100 BigDecimal y1_1 = y1.multiply(y2); 101 BigDecimal e1_1 = e1.multiply(y2); 102 103 BigDecimal x2_1 = x2.multiply(y1); 104 BigDecimal y2_1 = y2.multiply(y1); 105 BigDecimal e2_1 = e2.multiply(y1); 106 107 //3. 计算得出y2-y1 = 0所以(x2-x1)*x = CcArr[0][2]得到x = CcArr[0][2]/(x2-x1) 108 //3.1定义变量x 109 BigDecimal x = (e2_1.subtract(e1_1)).divide((x2_1.subtract(x1_1))); 110 111 //4.代入x计算出第一个式子的y 112 BigDecimal yy = e1.subtract(x1.multiply(x)); 113 BigDecimal y = yy.divide(y1); 114 double userx = x.doubleValue(); 115 double usery = y.doubleValue(); 116 117 //赋值 118 xy[0] = userx; 119 xy[1] = usery; 120 //5.返回xy 121 return xy; 122 } 123 124 //4.实现两个式子代入xy值进行计算查看是否相等 125 //第一个参数为xy的系数和结果,第二个参数为第一个式子计算得出的xy 126 public static boolean Result(double[][] doubles1,double[] doubles2){ 127 //定义一个boolean值统计状态 128 boolean rt; 129 //定义BigDecimal计算 130 BigDecimal x2 = new BigDecimal(doubles1[1][0]); 131 BigDecimal y2 = new BigDecimal(doubles1[1][1]); 132 BigDecimal e2 = new BigDecimal(doubles1[1][2]); 133 BigDecimal x = new BigDecimal(doubles2[0]); 134 BigDecimal y = new BigDecimal(doubles2[1]); 135 136 //判断第二个式子是否成立 137 BigDecimal x1 = x2.multiply(x); 138 BigDecimal y1 = y2.multiply(y); 139 if(x1.add(y1).equals(e2)){ 140 rt = true; 141 }else{ 142 rt = false; 143 } 144 return rt; 145 } 146 }
原文地址:https://www.cnblogs.com/aikang525/p/11660668.html
时间: 2024-10-19 21:10:45