复数的四则运算(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、代码测试结果

目录
打赏
0
0
0
0
0
分享
相关文章
分享188个JS图片效果JS代码,总有一款适合你
分享188个JS图片效果JS代码,总有一款适合你
153 1
SQL 中的 MIN 和 MAX 以及常见函数详解及示例演示
SQL中的MIN()函数和MAX()函数用于查找所选列的最小值和最大值,分别。以下是它们的用法和示例:
441 0
在Linux中,如何解决keepalived脑裂问题?
在Linux中,如何解决keepalived脑裂问题?
前端JS正则校验密码之3种实现方式
这篇文章展示了三种使用JavaScript正则表达式来校验密码的方法,密码需要满足包含大写字母、小写字母、数字及特殊字符,并在8到16位之间,同时提供了示例代码和实现效果。
303 1
前端JS正则校验密码之3种实现方式
Mac使用TCP发送信息nc -l 9000 和 telnet 127.0.0.1 9000
Mac使用TCP发送信息nc -l 9000 和 telnet 127.0.0.1 9000
124 1
重构U3D动画系统:运用Animator Controller层叠状态机优化游戏表现
【7月更文第11天】随着Unity 3D(简称U3D)游戏开发的不断深入,高效且流畅的动画系统成为了提升玩家体验的关键因素。本文将深入探讨如何通过重构U3D项目的动画系统,利用Animator Controller的层叠状态机(Layered State Machine)特性,显著提高动画的处理效率与游戏的流畅度。我们将通过一个实战示例,展示如何设置和优化状态机,进而实现角色动画的细腻控制与高效切换。
330 0
ERP系统中的供应链协同与协作解析
【7月更文挑战第25天】 ERP系统中的供应链协同与协作解析
782 1
1688代采集运系统搭建:实现采购订单处理自动化
1688代采集运系统为海外买家及跨境电商提供一站式服务, 包括商品采集、订单管理、国内集货与国际运输。系统简化采购流程, 提高效率, 并支持多平台与多语言。通过API接口实时获取商品信息, 自动处理订单与物流, 支持多种支付方式, 便于全球用户使用。系统搭建需注册认证并接入API, 进行测试优化。此系统助力国货全球化。
深入理解 Java IO 流:原理与应用
【4月更文挑战第4天】Java IO 浴是处理文件和数据输入输出的关键,涉及数据传输和处理。核心概念包括输入流(从源头读取)和输出流(写入目标),由InputStream和OutputStream接口定义基础操作。具体实现如FileInputStream和FileOutputStream用于文件操作,BufferedInputStream和BufferedOutputStream提升性能。IO流广泛应用于文件操作、网络通信、数据库交互和系统交互。其优点在于灵活性、可扩展性和高效性。使用时注意关闭流、处理异常及选择合适流实现。理解IO流原理和应用能提升编程效率和程序性能。
257 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问