用Java实现多项式相加
来源:互联网 发布:知乎 自己掏耳屎的方法 编辑:程序博客网 时间:2024/06/05 00:56
今天看了一篇关于C的多项式相加的文章,但是觉得那位作者的想法尚有待完善,觉得可以做得更好,可惜我不熟悉C,于是我用我熟悉的Java来完善这一程序。
多项式由三个部分组成:常数、系数和未知数(A、B、X等的)。多项式的加法规则是相同系数、相同未知数的常数可以进行相加,组成一个新的项,而不同系数或者不同未知数的,则不能进行相加减,应将其写到后面。我的多项式相加的想法是:先对一个用户输入的混乱的多项式根据系数来进行排序,再对排序过了两个多项式多项式相加的规则进行相加。最后输出结果。
课本上的多项式相加程序并没有对输入的多项式进行排序,这也算是我的一个小小小的创新,但是,在实际中,往往也不用排序,我在这里使用排序,我个人也觉得有不妥之处,但是不知道到底哪里不妥。
以下就是我的代码了:
首先创建一个多项式的类,规定多项式的元数据。
public class PolinomiaData {
public int exp;
public int costant;
public String symbol;
public PolinomiaData(int exp){
this.exp=exp;
this.costant=1;
this.symbol="X";
}
public PolinomiaData(int constant,int exp){
this.exp=exp;
this.costant=constant;
this.symbol="X";
}
public PolinomiaData(int constant,int exp,String symbol){
this.exp=exp;
this.costant=constant;
this.symbol=symbol;
}
/**
* @return the exp
*/
public int getExp() {
return exp;
}
/**
* @param exp the exp to set
*/
public void setExp(int exp) {
this.exp = exp;
}
/**
* @return the costant
*/
public int getCostant() {
return costant;
}
/**
* @param costant the costant to set
*/
public void setCostant(int costant) {
this.costant = costant;
}
/**
* @return the symbol
*/
public String getSymbol() {
return symbol;
}
/**
* @param symbol the symbol to set
*/
public void setSymbol(String symbol) {
this.symbol = symbol;
}
}
接下来我就直接上多项式的加法了:
public class PolinomiaMethod {
//获得多项式的式子
public ArrayList getPolinomia(PolinomiaData...pd){
ArrayList<PolinomiaData> al = new ArrayList();
for(PolinomiaData pp : pd){
al.add(pp);
}
return sort(al);
}
//多项式相加的方法
public ArrayList add(ArrayList<PolinomiaData> al1,ArrayList<PolinomiaData> al2){
int startIndex = 0;
int addConstant = 0 ;
for(int i = 0;i<al2.size();i++){
int j = startIndex;
while(al1.get(j).getExp()!= al2.get(i).getExp()){
j++;
if(j==al1.size()-1){
al1.add(al2.get(i));
startIndex=0;
break;
}
else if(al1.get(j).getExp()==al2.get(i).getExp() && al1.get(j).getSymbol()==al2.get(i).getSymbol()){
addConstant = al1.get(j).getCostant()+al2.get(i).getCostant();
al1.get(j).setCostant(addConstant);
startIndex = j;
break;
}
else {
al1.add(al2.get(i));
startIndex = 0;
break;
}
}
}
return sort(al1);
}
//对多项式进行排序
public ArrayList sort(ArrayList<PolinomiaData> al){
for(int i = 0; i<=al.size()-1;i++){
for(int j = i;j>=1;j--){
if(al.get(j-1).getExp()>al.get(j).getExp()){
swap(al.get(j-1),al.get(j));
}
}
}
return al;
}
//排序会用到的元素交换方法
public void swap(PolinomiaData ob1,PolinomiaData ob2){
PolinomiaData pd = new PolinomiaData(0,0,"X") ;
pd.setCostant(ob1.costant);
ob1.setCostant(ob2.getCostant());
ob2.setCostant(pd.getCostant());
pd.exp=ob1.exp;
ob1.exp=ob2.exp;
ob2.exp=pd.exp;
pd.symbol=ob1.symbol;
ob1.symbol=ob2.symbol;
ob2.symbol=pd.symbol;
}
//打印ArrayList里面的多项式
public void printPolinomia(ArrayList<PolinomiaData> al){
System.out.println("The Final Result is :");
int i = 0;
while(i<al.size()-1){
System.out.print(al.get(i).getCostant()+al.get(i).getSymbol()+"^"+al.get(i).getExp()+"+");
i++;
}
System.out.println(al.get(i).getCostant()+al.get(i).getSymbol()+"^"+al.get(i).getExp());
}
//简单的测试
public static void main(String args[]){
PolinomiaMethod pm = new PolinomiaMethod();
ArrayList<PolinomiaData> al1 = pm.getPolinomia(new PolinomiaData(2,3),new PolinomiaData(4,1),new PolinomiaData(4,7),new PolinomiaData(6,7,"A"));
ArrayList<PolinomiaData> al2 = pm.getPolinomia(new PolinomiaData(4,3),new PolinomiaData(7,4),new PolinomiaData(1,2),new PolinomiaData(5,7,"B"));
pm.printPolinomia(pm.add(al1, al2));
}
}
测试结果如下:
The Final Result is :
4X^1+1X^2+6X^3+7X^4+4X^7+6A^7+5B^7
这份代码主要还是为了交流,如果你发现其中有不妥之处,也请你指出来。
- 用Java实现多项式相加
- JAVA实现多项式相加
- Java链表形式实现多项式相加
- 多项式相加 单链表实现
- 单链表实现多项式相加
- 多项式相加单链表实现
- 单链表实现多项式相加
- Java单链表实现多项式相加、多种方式实现约瑟夫环
- 两个多项式相乘和相加的java实现
- 链表实现多项式相加
- 链表实现多项式相加
- 数据结构实现一元多项式相加
- 链表实现多项式相加
- 单链表实现一元多项式相加
- 用线性表实现多个多项式相加
- 用链式线性表实现两个一元多项式相加
- 链表实现的多项式相加相乘
- 用单链表实现一元多项式相加 C++代码
- 我所知的伟大人物
- C++ Singleton (单例) 模式最优实现
- 黑马程序员--第二十四天:网络编程第二天
- 深入了解scanf()/getchar()和gets()等函数
- C语言中的空指针、空指针常量、NULL_&_0
- 用Java实现多项式相加
- 正式转战cnblogs。开始我新的代码生涯
- 学习计划
- logistic regression 学习笔记
- poj2570||zoj1967 floyd思想
- POJ 2263 floyd思想
- POJ 2253 floyd思想
- ZOJ 2797 ||POJ 2472 floyd变形
- ZOJ 1082 floyd