Java原创项目-多项式计算器-带有GUI界面

package Homework.R2;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;

public class R2 {
    public static void main(String []args){
        R2JFrame R=new R2JFrame();
        R.setTitle("多项式计算器");
    }
}

class R2JFrame extends JFrame {
    R2JPanel P=new R2JPanel();;
    R2JFrame(){
        setDefaultCloseOperation(R2JFrame.EXIT_ON_CLOSE);
        setSize(700,300);
        setLocationRelativeTo(null);
        setResizable(false);
        add(P);
        setVisible(true);
    }
}

class R2JPanel extends JPanel implements ActionListener {
    JButton b1=new JButton("+");
    JButton b2=new JButton("-");
    JButton b3=new JButton("*");
    JButton b4=new JButton("计算");
    JButton b5=new JButton("代数");
    JButton b6=new JButton("求导");
    JButton b7=new JButton("原始");
    JTextField t1=new JTextField();
    JTextField t2=new JTextField();
    JTextField t3=new JTextField();
    JLabel l1=new JLabel("多项式1:");
    JLabel l2=new JLabel("多项式2:");
    JLabel l3=new JLabel("计算结果:");
    JLabel l4=new JLabel("+");
    JLabel l5=new JLabel("=");
    Calculate C=new Calculate();
    R2JPanel(){
        setLayout(null);
        b1.addActionListener(this);
        b2.addActionListener(this);
        b3.addActionListener(this);
        b4.addActionListener(this);
        b5.addActionListener(this);
        b6.addActionListener(this);
        b7.addActionListener(this);
        b1.setBounds(20,20,60,20);
        b2.setBounds(20,80,60,20);
        b3.setBounds(20,140,60,20);
        b4.setBounds(300,200,100,40);
        b5.setBounds(20,200,60,20);
        b6.setBounds(100,200,60,20);
        b7.setBounds(180,200,60,20);
        l1.setBounds(100,20,50,20);
        t1.setBounds(160,20,400,20);
        l2.setBounds(100,80,50,20);
        t2.setBounds(160,80,400,20);
        l3.setBounds(100,140,60,20);
        t3.setBounds(160,140,400,20);
        l4.setBounds(360,50,20,20);
        l5.setBounds(360,110,20,20);
        add(b1);
        add(b2);
        add(b3);
        add(b4);
        add(b5);
        add(b6);
        add(b7);
        add(t1);
        add(t2);
        add(t3);
        add(l1);
        add(l2);
        add(l3);
        add(l4);
        add(l5);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==b1){
            C.CA=1;
            l4.setText("+");
            l2.setText("多项式2:");
        }
        else if(e.getSource()==b2){
            C.CA=2;
            l4.setText("-");
            l2.setText("多项式2:");
        }
        else if(e.getSource()==b3){
            C.CA=3;
            l4.setText("*");
            l2.setText("多项式2:");
        }
        else if(e.getSource()==b4){
            String a=t1.getText();
            String b=t2.getText();
            try {
                t3.setText(C.CalculateResult(a, b));
            }
            catch (NumberFormatException s){
                t3.setText("输入格式错误!请重试!");
            }
        }
        else if(e.getSource()==b5){
            C.CA=4;
            l4.setText("&");
            l2.setText("代入数值:");
        }
        else if(e.getSource()==b6){
            C.CA=5;
            l4.setText("'");
            l2.setText("不可用");
        }
        else if(e.getSource()==b7){
            C.CA=6;
            l4.setText("@");
            l2.setText("不可用");
        }
    }
}

class Calculate{
    int CA=1;
    DX A1=new DX();
    DX A2=new DX();
    DX RE=new DX();

    Calculate(){
    }

    String CalculateResult(String a,String b){
        if(CA==1){
            A1.create(a);
            A2.create(b);
            RE.add(A1,A2);
        }
        if(CA==2){
            A1.create(a);
            A2.create(b);
            RE.subtract(A1,A2);
        }
        if(CA==3){
            A1.create(a);
            A2.create(b);
            RE.multiply(A1,A2);
        }
        if(CA==4){
            A1.create(a);
            double n=Double.parseDouble(b);
            return A1.Algebra(n)+"";
        }
        if(CA==5){
            A1.create(a);
            RE.derivatives(A1);
        }
        if(CA==6){
            A1.create(a);
            return A1.ToString();
        }
        return RE.toString();
    }
}

class DX{
    BigDecimal [][]A;
    void create(String s){
        BigDecimal [][]R=new BigDecimal[2][500];
        String []M=new String[500];
        int K=0;
        int i=0;
        int a=0;
        int b;
        while(true){
            int e1,e2;

            if(K==0) {
                e1 = s.indexOf("-", 1);
                while(e1-1>=1&&s.charAt(e1-1)=='^'){
                    e1=s.indexOf("-",e1+1);
                }
                e2 = s.indexOf("+", 1);
                K=1;
            }
            else{
                e1=s.indexOf("-",a+1);
                while(e1-1>=1&&s.charAt(e1-1)=='^'){
                    e1=s.indexOf("-",e1+1);
                }
                e2=s.indexOf("+",a+1);
            }
            if(e1>-1&&e2>-1){b=getMin(e1,e2);}
            else if(e1<0&&e2<0){M[i]=s.substring(a);i++;break;}
            else if(e1>=0){b=e1;}
            else {b=e2;}
            M[i]=s.substring(a,b);
            i++;
            a=b;
        }
        for(int d=0;d<i;d++) {
            int t = M[d].indexOf("x");
            if (t < 0) {
                R[0][d] = new BigDecimal(M[d]);
                R[1][d] = new BigDecimal("0");
            } else {
                t = M[d].indexOf("x^");
                if (t < 0) {
                    if (M[d].length() == 1) {
                        R[0][d] = new BigDecimal("1");
                        R[1][d] = new BigDecimal("1");
                    } else if (M[d].length() == 2 && M[d].contains("-")) {
                        R[0][d] = new BigDecimal("-1");
                        R[1][d] = new BigDecimal("1");
                    }
                    else if (M[d].length() == 2 && M[d].contains("+")) {
                        R[0][d] = new BigDecimal("1");
                        R[1][d] = new BigDecimal("1");
                    } else {
                        R[0][d] = new BigDecimal(M[d].substring(0, M[d].indexOf("x")));
                        R[1][d] =new BigDecimal("1");
                    }
                } else {
                    t = M[d].indexOf("x");
                    if (t == 0) {
                        R[0][d] = new BigDecimal("1");
                    } else if (t == 1 && M[d].charAt(0) == '-') {
                        R[0][d] = new BigDecimal("-1");
                    } else if (t == 1 && M[d].charAt(0) == '+') {
                        R[0][d] = new BigDecimal("1");
                    } else {
                        R[0][d] = new BigDecimal(M[d].substring(0, t));
                    }
                    R[1][d] = new BigDecimal(M[d].substring(t + 2));
                }
            }
        }
        for(int x=0;x<i-1;x++){
            for(int y=x+1;y<i;y++){
                if(R[1][x].compareTo(R[1][y])<0){
                    BigDecimal x1=R[0][x],x2=R[1][x];
                    R[0][x]=R[0][y];R[1][x]=R[1][y];
                    R[0][y]=x1;R[1][y]=x2;
                }
            }
        }
        A=new BigDecimal[2][i];
        for(int u=0;u<i;u++){
            A[0][u]=R[0][u];
            A[1][u]=R[1][u];
        }
        A=Simplify(A);
    }

    int getMin(int a,int b){
        return Math.min(a, b);
    }

    BigDecimal[][] Simplify(BigDecimal [][]F){
        for(int i=0;i<F[0].length-1;i++){
            for(int y=i+1;y<F[0].length;y++){
                if(F[0][i].compareTo(new BigDecimal("0"))!=0&&F[0][y].compareTo(new BigDecimal("0"))!=0) {
                    if (F[1][i].compareTo(F[1][y])==0) {
                        F[0][i] = F[0][i] .add(F[0][y]);
                        F[0][y] = new BigDecimal("0");
                    }
                }
            }
        }
        int s =0;
        for(int i=0;i<F[0].length;i++){
            if(F[0][i].compareTo(new BigDecimal("0"))!=0){s++;}
        }
        BigDecimal [][] Y=new BigDecimal[2][s];
        s=0;
        for(int i=0;i<F[0].length;i++){
            if(F[0][i].compareTo(new BigDecimal("0"))!=0){
                Y[0][s]=F[0][i];
                Y[1][s]=F[1][i];
                s++;}
        }
        for(int x=0;x<s-1;x++){
            for(int y=x+1;y<s;y++){
                if(Y[1][x].compareTo(Y[1][y])<0){
                    BigDecimal x1=Y[0][x],x2=Y[1][x];
                    Y[0][x]=Y[0][y];Y[1][x]=Y[1][y];
                    Y[0][y]=x1;Y[1][y]=x2;
                }
            }
        }
        return Y;
    }
    void add(DX A,DX B){
        BigDecimal [][]E=new BigDecimal[2][A.A[0].length+B.A[0].length];
        System.arraycopy(A.A[0], 0, E[0], 0, A.A[0].length);
        System.arraycopy(A.A[1], 0, E[1], 0, A.A[0].length);
        System.arraycopy(B.A[0], 0, E[0], A.A[0].length, B.A[0].length);
        System.arraycopy(B.A[1], 0, E[1], A.A[0].length, B.A[0].length);
        this.A=E;
        this.A=Simplify(this.A);
    }
    void subtract(DX A,DX B){
        for(int i=0;i<B.A[0].length;i++){
            B.A[0][i]=B.A[0][i].multiply(new BigDecimal("-1"));
        }
        BigDecimal [][]E=new BigDecimal[2][A.A[0].length+B.A[0].length];
        System.arraycopy(A.A[0], 0, E[0], 0, A.A[0].length);
        System.arraycopy(A.A[1], 0, E[1], 0, A.A[0].length);
        System.arraycopy(B.A[0], 0, E[0], A.A[0].length, B.A[0].length);
        System.arraycopy(B.A[1], 0, E[1], A.A[0].length, B.A[0].length);
        this.A=E;
        this.A=Simplify(this.A);
    }
    void multiply(DX A,DX B){
        BigDecimal [][]E=new BigDecimal[2][A.A[0].length*B.A[0].length];
        int s=0;
        for(int x=0;x<A.A[0].length;x++){
            for(int y=0;y<B.A[0].length;y++){
                E[0][s]=A.A[0][x].multiply(B.A[0][y]);
                E[1][s]=A.A[1][x].add(B.A[1][y]);
                s++;
            }
        }
        this.A=E;
        this.A=Simplify(this.A);
    }
    void derivatives(DX A){
        BigDecimal [][]E=new BigDecimal[2][A.A[0].length];
        for(int i=0;i<A.A[0].length;i++){
            if(A.A[1][i].compareTo(new BigDecimal("0"))==0){E[0][i]=new BigDecimal("0");}
            else{
                E[0][i]=A.A[0][i].multiply(A.A[1][i]);
                E[1][i]=A.A[1][i].subtract(new BigDecimal("1"));
            }
        }
        this.A=E;
        this.A=Simplify(this.A);
    }
    double Algebra(double n){
        double s=0;
        for(int i=0;i<A[0].length;i++){
            s=s+Double.parseDouble(A[0][i]+"")*Math.pow(n,Double.parseDouble(A[1][i]+""));
        }
        return s;
    }
    public String toString(){
        String S="";
        for(int i=0;i<A[0].length;i++){
            if(A[0][i].compareTo(new BigDecimal("0"))!=0){
                if(A[1][i].compareTo(new BigDecimal("0"))==0){
                    if(A[0][i].compareTo(new BigDecimal("0"))<0){S=S+A[0][i];}
                else{S=S+"+"+A[0][i];}}
                else if(A[0][i].compareTo(new BigDecimal("-1"))==0){S=S+"-";}
                else if(A[0][i].compareTo(new BigDecimal("1"))==0){S=S+"+";}
                else if(A[0][i].compareTo(new BigDecimal("0"))>0){S=S+"+"+A[0][i];}
                else{S=S+A[0][i];}
            }
            if(A[1][i].compareTo(new BigDecimal("0"))!=0){
                S=S+"x";
                if(A[1][i].compareTo(new BigDecimal("1"))!=0){
                    S=S+"^"+A[1][i];
                }
            }
        }
        if(S.equals("")){S="0";}
        if(S.charAt(0)=='+'){S=S.substring(1);}
        return S;
    }
    public String ToString(){
        String S=A[0].length+"";
        for(int i=0;i<A[0].length;i++){
            S=S+","+A[0][i]+","+A[1][i];
        }
        return S;
    }

}

希望这个项目能够帮助大家学习Java,学习Java Swing,做Java项目有所帮助,本文项目包括源文件已被打包为jar文件和java及class文件*1

希望这个项目能够帮助大家学习Java,学习Java Swing,做Java项目有所帮助,本文项目包括源文件已被打包为jar文件和java及class文件*2

希望这个项目能够帮助大家学习Java,学习Java Swing,做Java项目有所帮助,本文项目包括源文件已被打包为jar文件和java及class文件*3

希望这个项目能够帮助大家学习Java,学习Java Swing,做Java项目有所帮助,本文项目包括源文件已被打包为jar文件和java及class文件*4

希望这个项目能够帮助大家学习Java,学习Java Swing,做Java项目有所帮助,本文项目包括源文件已被打包为jar文件和java及class文件*5

希望这个项目能够帮助大家学习Java,学习Java Swing,做Java项目有所帮助,本文项目包括源文件已被打包为jar文件和java及class文件*6(重复勿介意)

这个程序能够计算两个多项式的和,积,差,并且具有强大的异常处理机制,能够计算 任意大小系数,小数,指数,

由于网站采用自签名SSL证书开启https,所以可能提示证书不可信,请放心使用

https://study.gengronglin.top/Source/R2.zip

已经发布到本人服务器上,供大家免费下载,学习

这是本人原创项目作品,供大家学习观摩使用,请尊重原创,转载务必声明出处

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A3010367369

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值