复数的四则运算(java版)

简介: 复数的四则运算(java版)

复数的四则运算(java版)


介绍

  • 复数,为实数的延伸,它使任一多项式方程都有根。复数当中有个“虚数单位 ” i,它是−1的一个平方根,即 i^2=−1。任一复数都可表达为 **x+yi,**其中x及y皆为实数,分别称为复数之“实部”和“虚部”。
  • 四则运算,是一种简单基本的数学运算,即 加法 、 减法 、 乘法 和 除法 四种运算。

复数的四则运算

要想实现复数的四则运算,我们就要先知道复数的四则运算分别都是如何计算的。

两个复数的四则运算(数学表达式)

复数一:a+bi  
复数二:c+di
加法 a+bi + c+di = (a+c)+(b+d)i
减法 a+bi - (c+di) = (a-c)+(b+d)i
乘法 a+bi * (c+di) = (ac-bd) + (ad+bc)i
除法 (a+bi)/(c+di) = [(ac+bd)+(bc-ad)i]/(c^2+d^2)

实现思路

由于 java程序设计语言 是一门面向对象编程的,所以我们可以考虑把 复数 封装成一个类,然后我们就可以实例化这个类,创建 复数 对象。我们在封装这个类的时候就可以思考该怎么封装,要去思考 复数 这个对象 中应该具备什么样的属性和特征。

  • 状态特征

状态特征也就是 复数对象 拥有的属性,应该有 实部虚部

  • 行为特征

行为特征也就是 复数对象 的具备方法,除了构造和setter and getter 方法,还应该有 实现复数相加的方法add(),实现复数相减的方法sub(),实现 复数相乘的方法mul(),实现复数相除的除法div(),还有重写toString()的方法。

代码

1、封装复数类

//复数的四则运算
public class Complex {
        //实部和虚部的定义
        //定义成double比较好的的原因之一是因为 有除法运算
        private double realPart;
        private double imagePart;
        //构造方法
        public Complex() {
        }
        public Complex(double realPart, double imagePart) {
            this.realPart = realPart;
            this.imagePart = imagePart;
        }
        //setter and getter
        public double getImagePart() {
            return imagePart;
        }
        public void setImagePart(double imagePart) {
            this.imagePart = imagePart;
        }
        public double getRealPart() {
            return realPart;
        }
        public void setRealPart(double realPart) {
            this.realPart = realPart;
        }
        //复数的加法
        public Complex add(Complex complexNumber) {
            if (complexNumber == null) {
                System.out.println("复数对象输入错误");
                return new Complex();
            }
            double newImagePart = this.getImagePart() + complexNumber.getImagePart();
            double newRealPart = this.getRealPart() + complexNumber.getRealPart();
            return new Complex(newRealPart, newImagePart);
        }
        //复数的减法
        public Complex sub(Complex complexNumber) {
            if (complexNumber == null) {
                System.out.println("复数对象输入错误");
                return new Complex();
            }
            double newImagePart = this.getImagePart() - complexNumber.getImagePart();
            double newRealPart = this.getRealPart() - complexNumber.getRealPart();
            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.getRealPart() * complexNumber.getImagePart() + this.getImagePart() * complexNumber.getRealPart();
            return new Complex(newRealPart, newImagePart);
        }
        public Complex division(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.getRealPart() * complexNumber.getImagePart() + this.getImagePart() * complexNumber.getRealPart())/ (complexNumber.getRealPart() * complexNumber.getRealPart() + complexNumber.getImagePart() * complexNumber.getImagePart());
            return new Complex(newRealPart, newImagePart);
        }
        //重写toString方法
        public String toString(){
            if(this.imagePart>0){
                return this.realPart+"+"+this.imagePart+"i"; //如果是虚部是正数,需要手动添加 +
            }else if(this.imagePart<0){
                return this.realPart+this.imagePart+"i";//如果虚部是负数,不用给你手动添加 -(运算的结果自带)
            }else return this.realPart+" ";
        }
    }

2、测试复数类

import java.util.Scanner;
//测试封装的复数类,实现负数的四则运算
public class ComplexTest {
    //这里我们可以采取从键盘中输入复数的实部和虚部
    public static void main(String[] args) {
        double realPart ;
        double imagePart ;
        Scanner s = new Scanner(System.in);
        System.out.print("输入第一个复数的实部:");
        realPart = s.nextDouble();
        System.out.print("输入第一个复数的虚部:");
        imagePart = s.nextDouble();
        Complex complex1 = new Complex(realPart,imagePart);
        System.out.print("输入第二个复数的实部:");
        realPart = s.nextDouble();
        System.out.print("输入第二个复数的虚部:");
        imagePart = s.nextDouble();
        Complex complex2 = new Complex(realPart,imagePart);
        //测试复数的加减乘除
        System.out.println("加法:"+ complex1.add(complex2));
        System.out.println("减法:"+complex1.sub(complex2));
        System.out.println("乘法:"+complex1.mul(complex2));
        System.out.println("除法:"+complex1.division(complex2));
    }
}

3、代码测试结果

目录
相关文章
|
4月前
|
JSON 数据安全/隐私保护 开发者
1688 item_search 接口对接全攻略:从入门到精通
本文详解1688开放平台item_search接口对接全流程,涵盖接口功能、参数说明、OAuth2.0授权、签名生成、Python代码实现及优化技巧,助力开发者高效完成B2B商品搜索集成,适用于采购系统、选品分析等场景。
|
6月前
|
安全 Java API
Java日期时间API:从Date到Java.time
本文深入解析了Java 8中引入的全新日期时间API,涵盖LocalDate、LocalTime、LocalDateTime、ZonedDateTime等核心类的使用,以及时间调整、格式化、时区处理和与旧API的互操作。通过实例对比,展示了新API在可变性、线程安全与易用性方面的显著优势,并提供迁移方案与实战技巧,助你掌握现代Java时间处理的最佳实践。
|
7月前
|
Java 关系型数据库 MySQL
Java项目实战(图书管理系统)
本项目为简易图书管理系统,实现图书增删改查、用户借阅归还及基础用户管理功能。采用Java语言,结合MySQL数据库与MVC架构,涵盖JDBC、Servlet、JSP等技术,适合初学者学习Java Web开发流程与项目结构设计。
373 2
|
11月前
|
编解码 搜索推荐 开发者
《深度剖析:鸿蒙系统不同终端设备的UI自适应布局策略》
在万物互联时代,鸿蒙系统凭借分布式理念和技术架构,在智能终端领域迅速崛起。然而,如何实现应用在多设备上的完美UI布局成为关键挑战。本文探讨了鸿蒙UI自适应布局的重要性、技术原理及设计原则,包括灵活的布局组件(Row、Column、Flex)、尺寸单位适配(lpx)、媒体查询与断点机制,以及基于用户体验的设计方法。通过实践案例分析,展示了音乐应用在手机、平板和智能电视上的出色表现,并展望了未来智能化、个性化的布局趋势。掌握这些技术与原则,开发者将为用户带来更优质的跨设备体验,推动鸿蒙生态繁荣发展。
348 8
|
域名解析 缓存 网络协议
DNS协议 是什么?说说DNS 完整的查询过程? _
DNS是互联网的域名系统,它像翻译官一样将域名转换成IP地址。域名由点分隔的名字组成,如www.xxx.com,包含三级、二级和顶级域名。查询方式分为递归和迭代,递归是请求者必须得到答案,而迭代则是服务器指引请求者如何获取答案。域名解析过程中,会利用浏览器和操作系统的缓存,如果缓存未命中,本地域名服务器会通过递归或迭代方式向上级服务器查询,最终得到IP地址并返回给浏览器,同时在各级缓存中保存记录。
809 1
DNS协议 是什么?说说DNS 完整的查询过程? _
|
SQL Java API
|
机器学习/深度学习 负载均衡 算法
深入探索Linux内核调度机制的优化策略###
本文旨在为读者揭开Linux操作系统中至关重要的一环——CPU调度机制的神秘面纱。通过深入浅出地解析其工作原理,并探讨一系列创新优化策略,本文不仅增强了技术爱好者的理论知识,更为系统管理员和软件开发者提供了实用的性能调优指南,旨在促进系统的高效运行与资源利用最大化。 ###
|
人工智能 搜索推荐 语音技术
青否AI数字人抖音稳定开播,数字人带货优势及注意事项!
AI数字人直播带货革新电商领域,虚拟形象外形逼真且互动流畅,改变购物体验。青否数字人采用【实时改写实时生成】确保内容不重复,并通过AI智能回复即时解答用户问题,解决非实时内容及低频互动违规。数字人技术具24/7工作能力和个性化互动优势,降低成本提高效率。青否数字人直播解决方案实现降本增效,助力商家全天候直播带货,提升销售额。
青否AI数字人抖音稳定开播,数字人带货优势及注意事项!
|
传感器 安全 搜索推荐
太空居住:长期太空任务的生命支持系统
【9月更文挑战第20天】长期太空居住的生命支持系统是一个复杂而精细的系统工程,涉及多个领域的协同作用。随着科技的不断进步和创新,未来的太空居住将更加安全、舒适和可持续。通过智能科技的应用,我们有理由相信,在不久的将来,人类将在太空中建立起真正的“家园”,为人类的星际探索事业开辟新的篇章。
|
编解码 人工智能 自然语言处理
Stable Diffusion文生图-图生图-ControINet插件-线稿上色-生产全套表情包-3D Openpose-局部重绘-换衣服,换姿势人设三视图一键生成教程大全(一)
Stable Diffusion文生图-图生图-ControINet插件-线稿上色-生产全套表情包-3D Openpose-局部重绘-换衣服,换姿势人设三视图一键生成教程大全(一)
1962 2