java怎么定义复数?

java创建一个复数类complex,对复数进行数学运算,复数具有如下格式:RealPart+ImaginaryPart*i,其中,i为-1的平方根,具体要求如下:

(1)利用浮点变量表示此类的私有数据。提供两个构造方法一个用于此类声明时对象的初始化;一个为带认值得无参构造方法

(2)提供两复数加、减、乘的运算方法

(3)按格式(a,b)打印复数,其中a为实部,b为虚部。

Java代码如下:

public class Complexnumber implements Cloneable {
    private double realPart;  //复数的实部
    private double imaginaryPart;  //复数的虚部

    public Complexnumber() {  //认构造函数
        this.realPart = 0.0;
        this.imaginaryPart = 0.0;
    }

    public Complexnumber(double a, double b) {  //重载构造函数
        this.realPart = a;
        this.imaginaryPart = b;
    }

    /**
     * 复数的加法运算 c = a + b的运算法则是:
     * c.实部 = a.实部 + b.实部
     * c.虚部 = a.虚部 + b.虚部
     */
    public Complexnumber add(Complexnumber aComNum) {
        if (aComNum == null) {
            System.err.println(对象不能够为null!);
            return new Complexnumber();
        }
        return new Complexnumber(this.realPart + aComNum.getRealPart(), this.imaginaryPart + aComNum.getImaginaryPart());
    }

    /**
     * 复数的减法运算 c = a - b的运算法则是:
     * c.实部 = a.实部 - b.实部
     * c.虚部 = a.虚部 - b.虚部
     */
    public Complexnumber decrease(Complexnumber aComNum) {
        if (aComNum == null) {
            System.err.println(对象不能够为null!);
            return new Complexnumber();
        }
        return new Complexnumber(this.realPart - aComNum.getRealPart(), this.imaginaryPart - aComNum.getImaginaryPart());
    }

    /**
     * 复数的乘法运算 c = a * b的运算法则是:
     * c.实部 = a.实部 * b.实部 - a.虚部 * b.虚部
     * c.虚部 = a.虚部 * b.实部 + a.实部 * b.虚部
     */
    public Complexnumber multiply(Complexnumber aComNum) {
        if (aComNum == null) {
            System.err.println(对象不能够为null!);
            return new Complexnumber();
        }
        double newReal = this.realPart * aComNum.realPart - this.imaginaryPart * aComNum.imaginaryPart;
        double newImaginary = this.realPart * aComNum.imaginaryPart + this.imaginaryPart * aComNum.realPart;
        Complexnumber result = new Complexnumber(newReal, newImaginary);
        return result;
    }

    /**
     * 复数的除法运算 c = a / b 的运算法则是:
     * c.实部 = (a.实部 * b.实部 + a.虚部 * b.虚部) / (b.实部* b.实部 + b.虚部 * b.虚部)
     * c.虚部 = (a.虚部 * b.实部 - a.实部 * b.虚部) / (b.实部 * b.实部 + b.虚部 * b.虚部)
     */
    public Complexnumber divide(Complexnumber aComNum) {
        if (aComNum == null) {
            System.err.println(对象不能够为null!);
            return new Complexnumber();
        }
        if ((aComNum.getRealPart() == 0) && (aComNum.getImaginaryPart() == 0)) {
            System.err.println(除数不能够为0!);
            return new Complexnumber();
        }
        double temp = aComNum.getRealPart() * aComNum.getRealPart() + aComNum.getImaginaryPart() * aComNum.getImaginaryPart();
        double crealpart = (this.realPart * aComNum.getRealPart() + this.imaginaryPart * aComNum.getImaginaryPart()) / temp;
        double cimaginaryPart = (this.imaginaryPart * aComNum.getRealPart() - this.realPart * aComNum.getImaginaryPart()) / temp;
        return new Complexnumber(crealpart, cimaginaryPart);
    }

    public String toString() {  //将一个复数显示为字符串
        return this.realPart +  +  + this.imaginaryPart + i;
    }

    public boolean equals(Object obj) {  //比较一个对象是否和这个复数对象的值相等
        if (obj == null) {
            return false;
        }
        //首先判断a是不是一个复数对象,instanceof关键字是用来判断对象的类型
        if (obj instanceof Complexnumber) {
            //如果a是复数对象,需要将它强制类型转换成复数对象,才能调用复数类提供的方法
            Complexnumber b = (Complexnumber) obj;
            if ((this.realPart == b.getRealPart()) && (this.imaginaryPart == b.getImaginaryPart())) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    public int hashCode() {  //获得该复数对象的hashcode
        /**
         * 如果两个复数对象是equals的,那么它们的hashCode也必须相同
         * 两个值相等的复数对象通过toString()方法得到的输出字符串是一样的
         * 于是,可以把得到的字符串的hashCode当作复数对象的hashCode
         */
        return this.toString().hashCode();
    }

    public Object clone() {  //根据现有对象克隆一个新对象
        /**
         * 如果要使自定义的类能够被clone,就必须实现Cloneable接口并且重写它的clone()方法
         * 如果仅仅重写了clone方法而没有在类的声明中添加实现Cloneable接口
         * 调用clone方法时将会出现CloneNotSupportedException异常
         */
        try {
            Complexnumber newObject = (Complexnumber) super.clone();
            newObject.setRealPart(this.realPart);
            newObject.setImaginaryPart(this.imaginaryPart);
            return newObject;
        } catch (CloneNotSupportedException e) {  //如果没有实现Cloneable接口,抛出异常

            e.printstacktrace();
            return null;
        }
    }

    public double getImaginaryPart() {  //返回虚部
        return imaginaryPart;
    }

    public void setImaginaryPart(double imaginaryPart) {  //设置虚部
        this.imaginaryPart = imaginaryPart;
    }

    public double getRealPart() {  //返回实部
        return realPart;
    }

    public void setRealPart(double realPart) {  //设置实部
        this.realPart = realPart;
    }

    public static void main(String[] args) throws CloneNotSupportedException {
        Complexnumber a = new Complexnumber(20, 15);
        Complexnumber b = new Complexnumber(11, 20);
        System.out.println(Complexnumber a:  + a.toString());
        System.out.println(Complexnumber b:  + b.toString());
        System.out.println((a + b) =  + a.add(b).toString());
        System.out.println((a - b) =  + a.decrease(b).toString());
        System.out.println((a * b) =  + a.multiply(b).toString());
        System.out.println((a / b) =  + a.divide(b).toString());
    }
}

相关学习推荐:java基础教程

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...