一、Complex类的成员及构造方法

package stu.crayue.complex;
/**
* @author Crayue
* @version 2019年10月24日 上午10:15:54
*/
public class Complex {private double real;//实部private double vir;//虚部public Complex() {//无参构造this(0.0,0.0);}public Complex(double real) {//单参构造this.real = real;}public Complex(double real, double vir) {//双参构造this.real = real;this.vir = vir;}public Complex(Complex c) {//Complex类型的单参构造this(c.real,c.vir);}

二、实现了getter和setter方法,并重写toString()和equals()方法

public double getReal() {return real;}public void setReal(double real) {this.real = real;}public double getVir() {return vir;}public void setVir(double vir) {this.vir = vir;}@Overridepublic boolean equals(Object obj) {//覆盖object的equals方法if(obj==null) {return false;}if(this==obj) {return true;}if(obj.getClass()!=this.getClass()) {return false;}Complex c= (Complex) obj;//强转obj类型为Complexreturn Math.abs(this.real-c.real)<1e-6 && Math.abs(this.vir-c.vir)<1e-6;}@Overridepublic String toString() {//覆盖object中的toString方法return "(" + real + "," +vir +")";}

三、加减乘除运算

在复数类中,加减乘除各用两种方法实现。举个例子,就比如a = b + c和a += b;

在该复数类中,用到了static修饰符,被修饰的方法可以用类名通过圆点运算符直接调用。也可以解决没有对象调用的问题,用类名直接调用,传入两个参数。

减法利用加法实现,除法利用乘法实现。

加法

 public Complex Add (Complex other) {this.real+=other.real;this.vir+=other.vir;return this;}//a = b + c;将该方法定义为静态,可以使用类名直接调用,然后输出结果。不用新定义一个复数去接收其和值;//且该方法实质上是用其中一个参数调用单参的加法实现。//加 静态类无法引用非静态方法,所以不能用this,需要new对象public static Complex Add(Complex one, Complex other) {return new Complex(one).Add(other);}

减法

//取相反数private static Complex Opposite(Complex c) {return new Complex(-c.real, -c.real);
}//减法public Complex Sub(Complex other) {return this.Add(Opposite(other));}public static Complex Sub(Complex one, Complex other) {return new Complex(one).Sub(other);}

乘法

已知,复数的乘法运算如下:

设z1=a+bi,z2=c+di (a、b、c、d∈R)是任意两个复数,那么它们的积(a+bi)(c+di)=(ac-bd)+(bc+ad)i。两个复数的积仍然是一个复数。

//乘法public Complex Mul(Complex other) {//必须realSave,防止值更改double Savereal = this.real;this.real = this.real * other.real - this.vir * other.vir;  this.vir = Savereal * other.vir + this.vir * other.real;return this;}public static Complex Mul(Complex one, Complex other) {return new Complex(one).Mul(other);}

除法

除法也可以通过乘法来进行运算,那么就应该将除数去相应的倒数,并且判断分母是否为零
复数取倒数运算如下:

Z=a+bi
1/Z=(a-bi) / [(a+bi)(a-bi)] =(a-bi) / (a²+b²) =a / (a²+b² ) - b i / (a²+b²)

 //取倒数private static Complex Reciprocal(Complex c) {double cc = c.real * c.real + c.vir * c.vir;//分母为零 代码优化使用三目运算符return (Math.abs(cc) < 1e-6)?null:new Complex(c.real /cc, -c.vir /cc) ;/*if (Math.abs(cc) < 1e-6) {return null;}return new Complex(c.real /cc, -c.vir /cc);    }*/public Complex Div(Complex other) {Complex another = Complex.Reciprocal(other);return another==null ? null :Mul(another);}public static Complex Div (Complex c1,Complex c2) {return new Complex(c1).Div(c2);}

四、带有test的源代码

 package stu.crayue.complex;
/**
* @author Crayue
* @version 2019年10月24日 上午10:15:54
*/
public class Complex {private double real;private double vir;public Complex() {//无参构造this(0.0,0.0);}public Complex(double real) {//单参构造this.real = real;}public Complex(double real, double vir) {//双参构造this.real = real;this.vir = vir;}public Complex(Complex c) {//Complex类型的单参构造this(c.real,c.vir);}public double getReal() {return real;}public void setReal(double real) {this.real = real;}public double getVir() {return vir;}public void setVir(double vir) {this.vir = vir;}@Overridepublic boolean equals(Object obj) {//覆盖object的equals方法if(obj==null) {return false;}if(this==obj) {return true;}if(obj.getClass()!=this.getClass()) {return false;}Complex c= (Complex) obj;//强转obj类型为Complexreturn Math.abs(this.real-c.real)<1e-6 && Math.abs(this.vir-c.vir)<1e-6;}@Overridepublic String toString() {//覆盖object中的toString方法return "(" + real + "," +vir +")";}//加法public Complex Add (Complex other) {this.real+=other.real;this.vir+=other.vir;return this;}public static Complex Add(Complex one, Complex other) {return new Complex(one).Add(other);}//取相反数private static Complex Opposite(Complex c) {return new Complex(-c.real, -c.real);
}//减法public Complex Sub(Complex other) {return this.Add(Opposite(other));}public static Complex Sub(Complex one, Complex other) {return new Complex(one).Sub(other);//return new Complex(one).Add(Opposite(other));}//乘法public Complex Mul(Complex other) {//必须realSave,防止值更改double Savereal = this.real;this.real = this.real * other.real - this.vir * other.vir;  this.vir = Savereal * other.vir + this.vir * other.real;return this;}public static Complex Mul(Complex one, Complex other) {return new Complex(one).Mul(other);}//取倒数private static Complex Reciprocal(Complex c) {double cc = c.real * c.real + c.vir * c.vir;//分母为零 代码优化 使用三目运算符:return (Math.abs(cc) < 1e-6)?null:new Complex(c.real /cc, -c.vir /cc) ;/*if (Math.abs(cc) < 1e-6) {return null;}return new Complex(c.real /cc, -c.vir /cc);  }*/public Complex Div(Complex other) {Complex another = Complex.Reciprocal(other);return another==null ? null :Mul(another);}public static Complex Div (Complex c1,Complex c2) {return new Complex(c1).Div(c2);//Complex another=Reciprocal(c2);//return another ==null?null:new Complex(c1).Mul(another);}
}

test:

package stu.crayue.complex.test;import stu.crayue.complex.Complex;/**
* @author Crayue
* @version 2019年10月24日 上午11:06:22
*/
public class Test {public static void main(String[] args) {Complex c1= new Complex(0, 1.0);Complex c2= new Complex(3.2, 5.3);Complex c3= new Complex(1, 1.0);System.out.println(c2.Add(c1).Add(c3));System.out.println(Complex.Add(c1, c2));//静态方法的调用System.out.println(Complex.Add(new Complex(0,1.0),new Complex(3.3,5.3)));//直接传入两个参数System.out.println(c2.Sub(c1));System.out.println(c3.Mul(c1));System.out.println(c3.Div(c1));}
}

Java学习笔记(五):Complex类的设计及加减乘除运算的实现相关推荐

  1. Java学习笔记(五):一张图总结完JVM8基础概念

    Java学习笔记(五):一张图总结完JVM8基础概念 引文 最近在学习JVM的相关内容,好不容易把基础概念全部都学了一遍,却发现知识网络是零零散散的.迫不得已,只好再来一次总的归纳总结.为了更好的理解 ...

  2. JAVA学习笔记五---函数

    JAVA学习笔记五---函数 5.1 方法的学习 编写一个程序,求圆的周长和面积. package practice; /*** 编写一个程序,求圆的周长和面积.* @author iszhangyo ...

  3. java学习笔记7--抽象类与抽象方法

    接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...

  4. Java学习笔记Day06 工具类及常用算法

    第六章 工具类及常用算法 文章目录 第六章 工具类及常用算法 Java语言基础类 Java基础类库 Object类 概述 toString方法 方法摘要 覆盖重写 equals方法 方法摘要 默认地址 ...

  5. Java学习笔记day7——枚举类练习、包装类、抽象类、接口

    1. 枚举类的常用方法 (1)String name():返回枚举常量对象名称 (2)int ordinal():返回常量对象的下标 (3)String toString():Enum父类又重写了Ob ...

  6. java学习笔记(五)----super用法,final用法,抽象类,接口

    子类不会继承父类的构造方法,在子类的构造方法中可使用super(参数列表)调用父类的构造方法. class Person { String name;   int age;   public Pers ...

  7. 【Java学习笔记五】Java异常处理

    异常通常分为三类: 程序可控制的异常:一般是可预见的错误,不是致命的.例如:除数为0,数组下标越界. 程序不可控制的的异常:这种异常往往是致命的,但是系统可以预见的.例如:系统栈溢出. 人为异常 当系 ...

  8. 【Java学习笔记一】类和对象

    面向对象程序设计的一个一个重要特点是:封装性. 这里的封装性有两方面含义:一是将有关的数据和操作代码封装在一个对象中形成一个基本单位,各个对象之间相互独立互不干扰,二是将对象中某些部分对外隐蔽,即隐蔽 ...

  9. Java学习笔记2——常用类

    目录 1 内部类 1.1 成员内部类 1.2 静态内部类 1.3 局部内部类 1.4 匿名内部类 2 Object类 2.1 getClass()方法 2.2 hashCode()方法 2.3 toS ...

  10. 21天学通Java学习笔记-Day11(常用类)

    java 常用类(重点): String 类: String 类代表字符串.创建以后不能更变. public class tests { public static void main(String[ ...

最新文章

  1. Android ProgressBar 加载中界面实现(loading 动画) 实现菊花的效果
  2. MongoDB.Update
  3. 学习使用Markdown最基础的语法(编辑器通用)
  4. window.open()函数参数说明
  5. 为什么indexOf在数组IE8上不起作用?
  6. Nginx设置本地浏览器缓存
  7. LeetCode Algorithm 240. 搜索二维矩阵 II
  8. iTOP-4412开发板实现3路ADC数模转换驱动例程
  9. CF1416E-Split【dp,set】
  10. 【渝粤教育】国家开放大学2018年春季 8601-22T燃气工程概论 参考试题
  11. [Spring]04_最小化Spring XML配置
  12. Ado.Net Entity Framework 批量删除、判断存在
  13. Apabi Reader-强大的免费pdf文档阅读器(方正出品)
  14. 用Python设置Excel样式
  15. windows 文件保护机制
  16. (Google Scholar)谷歌学术打不开怎么办,图文详解
  17. Android 蓝牙开发 BLE(低功耗) 摩拜单车共享汽车开门实例
  18. anbox android 镜像,Anbox将使Ubuntu手机能运行Android应用程序
  19. 凉凉!写了个脚本,不小时锁了1W台手机。。
  20. JAVA与C、C++比较

热门文章

  1. 认识即时通讯开发通信协议之MQTT
  2. 云存储解决方案-阿里云OSS
  3. 大学计算机课能旷课吗,计算机课旷课检讨书
  4. JavaScript 【99乘法表】【案例】
  5. iOS打包神器fastlane安装
  6. ps裁剪和裁切的区别_PS图片的裁剪和裁切的含义和应用
  7. CD4040二进制计数器实验电路的效果图演示_基础硬件电路图讲解
  8. 空间点集的三角剖分工具——四面体生成器(TetGen)和三维三角剖分包(CGAL)
  9. Linux之端口映射
  10. 从IP138上获取数据,查询多个IP的归宿地