定义名为Complex的类表示复数。
(1)Complex类位于oop2022 .prog02包中,访问权限均为public;
(2)double类型的成员变量real和image分别表示实部和虚部;
(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);
}
}