实现多项式的JAVA类

1 package practice;
  2 //http://introcs.cs.princeton.edu/java/92symbolic/Polynomial.java.html
  3 /*************************************************************************
  4  *  Compilation:  javac Polynomial.java
  5  *  Execution:    java Polynomial
  6  *
  7  *  Polynomials with integer coefficients.
  8  *
  9  *  % java Polynomial
 10  *  zero(x) =     0
 11  *  p(x) =        4x^3 + 3x^2 + 2x + 1
 12  *  q(x) =        3x^2 + 5
 13  *  p(x) + q(x) = 4x^3 + 6x^2 + 2x + 6
 14  *  p(x) * q(x) = 12x^5 + 9x^4 + 26x^3 + 18x^2 + 10x + 5
 15  *  p(q(x))     = 108x^6 + 567x^4 + 996x^2 + 586
 16  *  0 - p(x)    = -4x^3 - 3x^2 - 2x - 1
 17  *  p(3)        = 142
 18  *  p‘(x)       = 12x^2 + 6x + 2
 19  *  p‘‘(x)      = 24x + 6
 20  *
 21  *************************************************************************/
 22 public class Polynomial {
 23     private int[] coef; //coefficients 系数
 24     private int deg;//degree of polynomial (0 for the zero polynomial)
 25     
 26     //a*x^b
 27     public Polynomial(int a, int b){
 28         coef = new int[b+1];
 29         coef[b] = a;
 30         deg = degree();
 31     }
 32     
 33     // return the degree of this polynomial (0 for the zero polynomial)
 34     public int degree(){
 35         int d = 0;
 36         for(int i = 0; i<coef.length; i++)
 37             if(coef[i]!=0)
 38                 d = i;
 39 
 40         return d;
 41     }
 42     
 43     //return c = a+b
 44     public Polynomial plus(Polynomial b){
 45         Polynomial a = this;
 46         Polynomial c = new Polynomial(0, Math.max(a.deg, b.deg));
 47         for(int i = 0; i <= a.deg; i++)
 48             c.coef[i] += a.coef[i];
 49         for(int i = 0; i <= b.deg; i++)
 50             c.coef[i] += b.coef[i];
 51         c.deg = c.degree();
 52         return c;
 53     }
 54     
 55     // return (a - b)
 56     public Polynomial minus(Polynomial b) {
 57         Polynomial a = this;
 58         Polynomial c = new Polynomial(0, Math.max(a.deg, b.deg));
 59         for (int i = 0; i <= a.deg; i++) c.coef[i] += a.coef[i];
 60         for (int i = 0; i <= b.deg; i++) c.coef[i] -= b.coef[i];
 61         c.deg = c.degree();
 62         return c;
 63     }
 64 
 65     // return (a * b)
 66     public Polynomial times(Polynomial b) {
 67         Polynomial a = this;
 68         Polynomial c = new Polynomial(0, a.deg + b.deg);
 69         for (int i = 0; i <= a.deg; i++)
 70             for (int j = 0; j <= b.deg; j++)
 71                 c.coef[i+j] += (a.coef[i] * b.coef[j]);
 72         c.deg = c.degree();
 73         return c;
 74     }
 75 
 76     // return a(b(x))  - compute using Horner‘s method
 77     public Polynomial compose(Polynomial b) {
 78         Polynomial a = this;
 79         Polynomial c = new Polynomial(0, 0);
 80         for (int i = a.deg; i >= 0; i--) {
 81             Polynomial term = new Polynomial(a.coef[i], 0);
 82             c = term.plus(b.times(c));
 83         }
 84         return c;
 85     }
 86 
 87 
 88     // do a and b represent the same polynomial?
 89     public boolean eq(Polynomial b) {
 90         Polynomial a = this;
 91         if (a.deg != b.deg) return false;
 92         for (int i = a.deg; i >= 0; i--)
 93             if (a.coef[i] != b.coef[i]) return false;
 94         return true;
 95     }
 96 
 97 
 98     // use Horner‘s method to compute and return the polynomial evaluated at x
 99     public int evaluate(int x) {
100         int p = 0;
101         for (int i = deg; i >= 0; i--)
102             p = coef[i] + (x * p);
103         return p;
104     }
105 
106     // differentiate this polynomial and return it
107     public Polynomial differentiate() {
108         if (deg == 0) return new Polynomial(0, 0);
109         Polynomial deriv = new Polynomial(0, deg - 1);
110         deriv.deg = deg - 1;
111         for (int i = 0; i < deg; i++)
112             deriv.coef[i] = (i + 1) * coef[i + 1];
113         return deriv;
114     }
115     public String toString(){
116         if(deg == 0)
117             return "" + coef[0];
118         if(deg == 1)
119             return coef[1] + "x + " + coef[0];
120         
121         String s = coef[deg] + "x^" + deg;
122         for(int i = deg-1; i >= 0; i--){
123             if(coef[i] == 0)
124                 continue;
125             else if(coef[i] > 0)
126                 s = s + " + " + ( coef[i]);
127             else if(coef[i] < 0)
128                 s = s + " - " + (-coef[i]);
129             if(i== 1)
130                 s = s + "x";
131             else if(i > 1)
132                 s = s +"x^" + i;
133         }
134         return s;
135     }
136     
137     public static void main(String[] args) { 
138         Polynomial zero = new Polynomial(0, 0);
139 
140         Polynomial p1   = new Polynomial(4, 3);
141         Polynomial p2   = new Polynomial(3, 2);
142         Polynomial p3   = new Polynomial(1, 0);
143         Polynomial p4   = new Polynomial(2, 1);
144         Polynomial p    = p1.plus(p2).plus(p3).plus(p4);   // 4x^3 + 3x^2 + 1
145 
146         Polynomial q1   = new Polynomial(3, 2);
147         Polynomial q2   = new Polynomial(5, 0);
148         Polynomial q    = q1.plus(q2);                     // 3x^2 + 5
149 
150 
151         Polynomial r    = p.plus(q);
152 //        Polynomial s    = p.times(q);
153 //        Polynomial t    = p.compose(q);
154 
155         System.out.println("zero(x) =     " + zero);
156         System.out.println("p(x) =        " + p);
157         System.out.println("q(x) =        " + q);
158         System.out.println("p(x) + q(x) = " + r);
159 //        System.out.println("p(x) * q(x) = " + s);
160 //        System.out.println("p(q(x))     = " + t);
161 //        System.out.println("0 - p(x)    = " + zero.minus(p));
162 //        System.out.println("p(3)        = " + p.evaluate(3));
163 //        System.out.println("p‘(x)       = " + p.differentiate());
164 //        System.out.println("p‘‘(x)      = " + p.differentiate().differentiate());
165    }
166 }

时间: 2024-10-13 17:06:41

实现多项式的JAVA类的相关文章

jvm系列(一):java类的加载机制

java类的加载机制 原文:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个

Java类的定义及其实例化

如果你不了解类和对象的概念,请猛击这里:Java类和对象的概念 类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public class Dog{ String name; int age; void bark(){  // 汪汪叫 System.out.println("汪汪,不要过来"); } void hungry(){  // 饥饿 System.out.println("主人,我饿了")

js原型对象与Java类的区别

在我学习Javascript的原型对象时,我总是不自觉地拿Java的类思想来做比较,时间久了,我渐渐认识到二者有巨大的不同. 首先,类是不能直接当方法来运行,它最简便的方式是调用其静态方法:而原型对象本身就是一个方法体,它可以直接运行.二者在构造对象的过程中,js可以扮演两种角色,一个可以将原型对象当方法来使用,才接触js时,都是以这种形式来使用,即万物皆方法体,像c;另一个是模仿面向对象的特性,为原型对象定义属性,运用构造器时,将构造器构造的对象的指针指通过原型链指向原型对象的属性,从而实现面

Java类的设计----Object 类

Object类 Object类是所有Java类的根父类如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类 public class Person { ... } 等价于: public class Person extends Object {. ... }例: method(Object obj){-}//可以接收任何类作为其参数 Object o=new Person; method(o); ==操作符与equals方法 ==操作符与equals方法的区别: =

java类的生命周期

类的生命周期:加载.连接(验证.准备.解析).初始化.使用.卸载主动引用(有且只有)初始化: 1.new.getstatic.putstatic.invokestatic如果类没初始化,则初始化new关键字实例化对象.读取或设置一个类的静态字段(被final修饰.*已在编译期把结果放入常量池的静态字段除外).调用一个类的静态方法  2.使用java.lang.reflect包的方法对类进行发射调用的时候,如果类没有进行过初始化,则初始化 3.当初始化一个类的时候,父类没初始化,则初始化 4.当虚

Java —类和对象

类和对象 类是对象的类型,是具有相同的属性和方法的一组对象的集合. 定义类 访问修饰符 class 类名 { 数据类型 属性名: 访问修饰符 返回值类型 方法名 {} } 创建对象:类名 对象名 = new 类名(); 使用对象:引用对象的属性:对象名.属性名;引用对象的方法:对象名.方法名(); 可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立. 成员变量和局部变量 成员变量:在类中定义,描述对象将要有什么.可以在本类的方法或其他类的方法中使用.java会给成员变量一个初始

Eclipse或MyEclipse没有在java类文件上显示Spring图标的问题

Eclipse或MyEclipse没有在java类文件上显示接口图标的问题解决办法: 前: 后:

Java类的生命周期详解

引言 最近有位细心的朋友在阅读笔者的文章时,对java类的生命周期问题有一些疑惑,笔者打开百度搜了一下相关的问题,看到网上的资料很少有把这个问题讲明白的,主要是因为目前国内java方面的教材大多只是告诉你“怎样做”,但至于“为什么这样做”却不多说,所以造成大家在基础和原理方面的知识比较匮乏,所以笔者今天就斗胆来讲一下这个问题,权当抛砖引玉,希望对在这个问题上有疑惑的朋友有所帮助,文中有说的不对的地方,也希望各路高手前来指正. 首先来了解一下jvm(java虚拟机)中的几个比较重要的内存区域,这几

jsp页面应用Java类

两种方法将Java类应用到jsp页面中: 1. <jsp:useBean id="类实例名字" class="具体的类" scope="page/request/session/application" /><jsp:setProperty name="id的值" property="参数名" value="参数值" />//或者多个参数直对<jsp:get