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
已经发布到本人服务器上,供大家免费下载,学习
这是本人原创项目作品,供大家学习观摩使用,请尊重原创,转载务必声明出处