数据结构学习-Java实现复数类


前言

记录自己学习数据结构的点点滴滴,课程是听的青岛大学王卓老师的数据结构课,使用课本为闫蔚敏数据结构第二版,本文代码使用java语言。
课程链接: link.


一、背景

抽象数据类型(Abstract Data Type,ADT):由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。

抽象数据类型定义格式如下:

ADT 抽象数据类型名{
	数据对象:<数据对象的定义>
	数据关系:<数据关系的定义>
	基本操作:<基本操作的定义>
} ADT 抽象数据类型名

其中,数据对象和数据关系的定义采用数学符号和自然语言描述,基本操作的定义格式为:

基本操作名(参数表){
	初始条件:<初始条件描述>
	操作结果:<操作结果描述>
}

学习完抽象数据类型后,尝试自己使用java语言实现复数类。

任务如下:
利用java创建一个复数类,并进行”加“、”减“、”乘“、”除“等数学运算
复数简介:形如z=a+bi(a,b均为实数)的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位。当z的虚部等于零时,常称z为实数;当z的虚部不等于零时,实部等于零时,常称z为纯虚数。

复数的运算法则:

z1=a+bi,z2=c+di
加法法则: z1+z2=(a+c)+(b+d)i
减法法则: z1-z2=(a-c)+(b-d)i
乘法法则: z1*z2=(ac-bd)+(bc+ad)i
除法法则: z1/z2=((ac+bd)+(bc-ad)i)/(c^2+d^2)

Java代码

1.复数类

package A1;

public class Complex {
    private double realPart;  //实部
    private double imagePart; //虚部

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

    public Complex(double realPart, double imagePart) {
        this.realPart = realPart;
        this.imagePart = imagePart;
    }

    public double getRealPart() {
        return realPart;
    }

    public void setRealPart(double realPart) {
        this.realPart = realPart;
    }

    public double getImagePart() {
        return imagePart;
    }

    public void setImagePart(double imagePart) {
        this.imagePart = imagePart;
    }

    //复数的加法
    public Complex add(Complex complexNumber) {
        if (complexNumber == null) {
            System.out.println("对象输入错误!请重新输入!");
            return new Complex();
        }
        double newRealPart = this.getRealPart() + complexNumber.getRealPart();
        double newImagePart = this.getImagePart() + complexNumber.getImagePart();
        return new Complex(newRealPart, newImagePart);
    }

    //复数的减法
    public Complex sub(Complex complexNumber) {
        if (complexNumber == null) {
            System.out.println("对象输入错误!请重新输入!");
            return new Complex();
        }
        double newRealPart = this.getRealPart() - complexNumber.getRealPart();
        double newImagePart = this.getImagePart() - complexNumber.getImagePart();
        return new Complex(newRealPart, newImagePart);
    }

    //复数的乘法
    public Complex mul(Complex complexNumber) {
        if (complexNumber == null) {
            System.out.println("对象输入错误!请重新输入!");
            return new Complex();
        }
        double newRealPart = this.getRealPart() * complexNumber.getRealPart() - this.getImagePart() * complexNumber.getImagePart();
        double newImagePart = this.getImagePart() * complexNumber.getRealPart() + this.getRealPart() * complexNumber.getImagePart();
        return new Complex(newRealPart, newImagePart);
    }

    //复数的除法
    public Complex div(Complex complexNumber) {
        if (complexNumber == null) {
            System.out.println("对象输入错误!请重新输入!");
            return new Complex();
        }
        double newRealPart = (this.getRealPart() * complexNumber.getRealPart() + this.getImagePart() * complexNumber.getImagePart()) / (complexNumber.getRealPart() * complexNumber.getRealPart() + complexNumber.getImagePart() * complexNumber.getImagePart());
        double newImagePart = (this.getImagePart() * complexNumber.getRealPart() - this.getRealPart() * complexNumber.getImagePart()) / (complexNumber.getRealPart() * complexNumber.getRealPart() + complexNumber.getImagePart() * complexNumber.getImagePart());
        return new Complex(newRealPart, newImagePart);
    }

    @Override
    public String toString() {
        if (imagePart > 0) {
            return realPart + "+" + imagePart + "i";
        } else if (imagePart < 0) {
            return this.realPart + imagePart + "i";
        } else {
            return realPart + ",虚部为0";
        }
    }

}

2.测试

package A1;

import java.util.Scanner;

public class ComplexTest {
    public static void main(String[] args) {
        double realPart = 0.0;
        double imagePart = 0.0;
        System.out.println("请输入第一个复数的实部和虚部:");
        Scanner sc = new Scanner(System.in);
        realPart = sc.nextDouble();
        imagePart = sc.nextDouble();
        Complex complexNumber1 = new Complex(realPart, imagePart);

        System.out.println("请输入第二个复数的实部和虚部:");
        realPart = sc.nextDouble();
        imagePart = sc.nextDouble();
        Complex complexNumber2 = new Complex(realPart, imagePart);

        Complex add = complexNumber1.add(complexNumber2);
        Complex sub = complexNumber1.sub(complexNumber2);
        Complex mul = complexNumber1.mul(complexNumber2);
        Complex div = complexNumber1.div(complexNumber2);

        System.out.println("两数相加:" + add);
        System.out.println("两数相减:" + sub);
        System.out.println("两数相乘:" + mul);
        System.out.println("两数相除:" + div);

    }
}

测试结果:
在这里插入图片描述

总结

通过上述例子,可以加深对抽象数据类型的概念!

  • 30
    点赞
  • 156
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值