定义名为Complex的类表示复数

定义名为Complex的类表示复数。 

(1)Complex类位于oop2022 .prog02包中,访问权限均为public;

(2)double类型的成员变量realimage分别表示实部和虚部;

(3)无参方法创建实部和虚部均为0的复数对象;

(4)有参构造方法创建指定实部和虚部值的复数对象;

(5)方法abs()返回复数的绝对值,复数绝对值是指:实部和虚部的平方和开平方;

(6)方法add(Complex other)把other的实部和虚部的值加到当前对象的实部和虚部上,并返回当前对象;加法

(7)静态方法add(Complex cl,Complex c2)创建并返回一个新的复数对象,其实部和虚部分别是cl和c2实部和虚部的和;

(8)覆盖(override)equals方法,判断依据是实部和虚部的值;以相同的依据(override)hashCode方法;

(9)覆盖(override)toString方法,返回字符串的形式“实部+虚部i”。如果虚部是负数则+变成-,如果虚部是0,则只返回实部;

(10)Complex类的对象能够进行克隆(clone);

(11)对成员变量进行封装,类的其它成员使用恰当的访问权限修饰符。

package oop2022 .prog02 ;

import java.util.Scanner;
import com.mec.complex.core.Complex;
import java.math.BigDecimal;
import java.math.RoundingMode;
/*
1.定义复数类Complex,实现以下功能:
  (1)构造函数
  (2)加减乘除函数
  (3)toString()函数
  (4)equals()函数
  (5)Complex类的对象能够进行克隆(clone)
  (6)编写测试类,实现键盘读取数据创建复数对象,并测试Complex类定义的函数
*/

public class Test1 {
    public static void main(String[] args)
    {
        //初始化数组
        double[] array = Complex.init();

        //初始化复数对象
        Complex complex1 = new Complex(array[0],array[1]);
        Complex complex2 = new Complex(array[2],array[3]);

        //加减乘除运算并输出
        System.out.println("加:"+complex1.add(complex2).toString());
        System.out.println("减:"+complex1.subtract(complex2).toString());
        System.out.println("乘:"+complex1.multiply(complex2).toString());
        System.out.println("除:"+complex1.divide(complex2).toString());

        //判断是否相等并输出
        System.out.println("是否相等:" + complex1.equals(new Complex(1.0, 1.0)));
    }
}

class Complex {

    private double real = 0.0;
    private double image = 0.0;

    //无参构造
    public Complex() {
    }

    //有参构造函数
    Complex(double real, double image) {
        this.real = real;
        this.image = image;
    }

    //加
    public Complex add(Complex complex)
    {
        return new Complex(this.real+complex.real,this.image+complex.image);
    }

    //减
    public Complex subtract(Complex complex)
    {
        return new Complex(this.real-complex.real,this.image-complex.image);
    }

    //乘
    //设z1=a+bi,z2=c+di(a、b、c、d∈R)是任意两个复数,那么它们的积(a+bi)(c+di)=(ac-bd)+(bc+ad)i
    public Complex multiply(Complex complex)
    {
        return new Complex(this.real*complex.real-this.image*complex.image,this.image*complex.real+this.real*complex.image);
    }

    //除
    //(a+bi)/(c+di)=(ac+bd)/(c^2+d^2) +((bc-ad)/(c^2+d^2))i
    public Complex divide(Complex complex)
    {
        double real = (this.real*complex.real+this.image*complex.image)/(complex.real*complex.real+complex.image*complex.image);
        double image = (this.image*complex.real-this.real*complex.image)/(complex.real*complex.real+complex.image*complex.image);
        return new Complex(real,image);
    }

    //重写toString()
    public String toString()
    {
        //当虚部为零时省略虚部,当虚部不为零但实部为零时省略实部
        if (this.image == 0) { return this.real+""; }
        else if (this.image > 0) {
            if (this.real == 0) return this.image + "i";
            else return this.real + "+" + this.image + "i";
        }
        else{
            if (this.real == 0) return this.image+"i";
            else return this.real+""+this.image+"i";
        }
    }

    //是否相等
    public boolean equals(Complex complex)
    {
        if ((this.real == complex.real) && (this.image == complex.image))
        {
            return true;
        }
        return false;
    }

    //从键盘输入,并存放在数组中
    public static double[] init()
    {
        Scanner scanner = new Scanner(System.in);
        double[] array = new double[4];
        System.out.println("请分别输入第一个复数的实部、虚部,第二个复数的实部、虚部:");
        for (int i = 0; i < 4; i++) array[i] = Double.parseDouble(scanner.next());
        scanner.close();
        return array;
    }
}
    //Complex类的对象能够进行克隆(clone)
    public Complex clone()
	{
		Complex tempC;
		try
		{
			tempC = (Complex)super.clone();
		}
		catch(CloneNotSupportedException ex)
		{
			return null;
		}
		return tempC;
	}
	
	//美化浮点显示
	public static String formatDouble(double d)
	{
	    BigDecimal bg = new BigDecimal(d).setScale(2, RoundingMode.UP);
	    double num = bg.doubleValue();
	    if (Math.round(num) - num == 0) 
	    {
	        return String.valueOf((long) num);
	    }
	    return String.valueOf(num);
	}
//编写测试类,实现键盘读取数据创建复数对象,并测试Complex类定义的函数
public abstract class Test {
 
	public static void main(String[] args) {
		Complex c1 = new Complex(3.4, -1.2);
		Complex c2 = new Complex(25.0, 25.0);
		Complex c3 = new Complex(3.0, 4.0);
		Complex c4 = new Complex(25.0,25.0);
		//Add
		//c1.add(c3);
		//System.out.println(c1);
		c1.add(c2).add(c3);
		System.out.println("Add :"+ c1);
		//Sub
		c2.sub(c3);
		System.out.println("Sub :"+ c2);
		//Mul
		Complex c5 = Complex.mul(c4, c3);
		System.out.println("Mul :" + c5);
		//Div
		c4.div(c3);
		System.out.println("Div :" + c4);
		
	}
 
}

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值