鱼C论坛

 找回密码
 立即注册
查看: 2426|回复: 1

[技术交流] 解方程器

[复制链接]
发表于 2019-12-5 06:31:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
可以解一元一次一元二次方程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-5 06:31:47 | 显示全部楼层
public class EquationReducer {
        
        public static final String DIGITAL="-?\\d+\\.?\\d*";

        public static void main(String[] args) {
                Scanner scan=new Scanner(System.in);
                String equation=scan.next();
                System.out.println(Arrays.toString(reduce(equation)));
                scan.close();
        }
        public static double[] reduce(String equation){
                if(equation.matches(DIGITAL
                                + "x"
                                + "\\+"
                                + DIGITAL
                                + "="
                                + DIGITAL)){
                        double[] args=new double[3]; 
                        String[] parts=equation.split("x\\+");
                        args[0]=Double.parseDouble(parts[0]);
                        args[1]=Double.parseDouble(parts[1].split("=")[0]);
                        args[2]=Double.parseDouble(parts[1].split("=")[1]);
                        if(args[0]!=0.0){
                                System.out.println(Arrays.toString(args));
                                double solution=(args[2]-args[1])/args[0];
                                return new double[]{solution};
                        }
                        return null;
                }
                if(equation.matches(DIGITAL+
                                "x\\^2"+
                                "\\+"+
                                DIGITAL+
                                "x"+
                                "\\+"+
                                DIGITAL+
                                "="+
                                DIGITAL)){
                        double[] args=new double[4];
                        String[] firstSplitParts=equation.split("x\\^2\\+");
                        args[0]=Double.parseDouble(firstSplitParts[0]);
                        String[] secondSplitParts=firstSplitParts[1].split("x\\+");
                        args[1]=Double.parseDouble(secondSplitParts[0]);
                        args[2]=Double.parseDouble(secondSplitParts[1].split("=")[0]);
                        args[3]=Double.parseDouble(secondSplitParts[1].split("=")[1]);
                        System.out.println(Arrays.toString(args));
                        
                        double delt=Math.sqrt((Math.pow(args[2],2.0)-4*args[0]*(args[2]-args[3])));
                        if(delt>0){
                                double solution1=(-args[1]+delt)/2*args[0];
                                double solution2=(-args[2]-delt)/2*args[0];
                                return new double[]{solution1,solution2};
                        }else{
                                System.out.println("无解!");
                                return null;
                        }
                        
                }
                return null;
        }

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 04:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表