当前位置: 首页 > news >正文

Complex类的实现

核心代码

public class Complex {
	private double real;
	private double vir;
	
	//复数的除法,c = a/b
	public static Complex divide(Complex one, Complex two) throws DividedByZeroException {
		return multiplication(one, reciprocal(two));
	}
	
	//复数的除法,a /= b
	public Complex divide(Complex one) throws DividedByZeroException {
		return multiplication(reciprocal(one));
	}

    //取倒数运算
	private static Complex reciprocal(Complex one) throws DividedByZeroException {
		if(one == null) {
			return null;
		}
		
		double mode = one.real*one.real + one.vir*one.vir;
		if(mode <= 1e-6) {
			throw new DividedByZeroException("除0错!!!");
		}
		
		return new Complex(one.real / mode, -one.vir / mode);
	}
	
	//复数的乘法,c = a*b
	public static Complex multiplication(Complex one, Complex two) {
		return new Complex(one).multiplication(two);
	}
	
	//复数的乘法,a *= b
	public Complex multiplication(Complex one) {
		setComplex(this.real * one.real - this.vir * one.vir, 
				this.vir * one.real + this.real * one.vir);
		return this;
	}
	
	//复数的减法,c = a-b
	public static Complex subtraction(Complex one, Complex two) {
		return (new Complex(one)).subtraction(two);
	}
	
	//复数的减法,a -= b
	public Complex subtraction(Complex one) {
		return add(opposite(one));
	}
	
	//求相反数运算
	private static Complex opposite(Complex one) {
		return new Complex(-one.real, -one.vir);
	}
	
	//复数的加法,c = a+b
	public static Complex add(Complex one, Complex two) {
		return (new Complex(one)).add(two);
	}
	
	//复数的加法,a += b
	public Complex add(Complex one) {
		setComplex(this.real + one.real, this.vir + one.vir);
		return this;
	}
	
	public void setComplex(Complex one) {
		setComplex(one.real, one.vir);
	}
	
	public void setComplex(double one) {
		setComplex(one, 0.0);
	}
	
	public void setComplex(double one, double two) {
		setReal(one);
		setVir(two);
	}
	
	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;
	}

	//重写的equals()方法
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (obj instanceof Complex) { 
			Complex one = (Complex) obj;
			if (Math.abs(this.real - one.real) <= 1e-6 && Math.abs(this.vir - one.vir) <= 1e-6) {
				return true;
			}
		}
		return false;
	}

	//重写的toString()方法
	@Override
	public String toString() {
		return "(" + real + "," + vir + ")";
	}
	
	//四个构造方法
	public Complex() {
		this(0.0, 0.0);
	}

	public Complex(Complex o) {
		this(o.getReal(), o.getVir());
	}

	public Complex(double real) {
		this(real, 0.0);
	}

	public Complex(double real, double vir) {
		setReal(real);
		setVir(vir);
	}
	
}

除法中的除零错抛异常代码

public class DividedByZeroException extends Exception {
	private static final long serialVersionUID = -1917368295506021042L;

	public DividedByZeroException() {
	}

	public DividedByZeroException(String message) {
		super(message);
	}

	public DividedByZeroException(Throwable cause) {
		super(cause);
	}

	public DividedByZeroException(String message, Throwable cause) {
		super(message, cause);
	}

	public DividedByZeroException(String message, Throwable cause, boolean enableSuppression,
			boolean writableStackTrace) {
		super(message, cause, enableSuppression, writableStackTrace);
	}

}

测试代码

public class Test {

	public static void main(String[] args) throws DividedByZeroException {
		System.out.println("调用无参构造方法");
		Complex complex1 = new Complex();
		complex1.setReal(1.0);
		complex1.setVir(1.0);
		System.out.println(complex1);
		System.out.println(complex1.equals(complex1));
		
		System.out.println("调用单参构造方法");
		Complex complex2 = new Complex(2.2);
		complex2.setVir(2.2);
		System.out.println(complex2.toString());
		System.out.println(complex2.equals(complex1));
		
		System.out.println("调用双参构造方法");
		Complex complex3 = new Complex(3.3, 3.3);
		System.out.println(complex3.toString());
		System.out.println(complex3.equals(complex3));
		
		System.out.println("调用类参数构造方法");
		Complex complex4 = new Complex(complex2);
		System.out.println(complex4.toString());
		System.out.println(complex4.equals(complex2));
		
		System.out.println("加法,一个参数");
		System.out.println(complex1.add(complex2));
		
		System.out.println("加法,两个参数");
		Complex complex5;
		complex5 = Complex.add(complex3, complex4);  //add应为静态方法
		System.out.println(complex5);
		
		System.out.println("减法,一个参数");
		Complex c1 = new Complex(6.0, 4.1);
		Complex c2 = new Complex(4.0, 5.1);
		System.out.println(c1.subtraction(c2));
		
		System.out.println("减法,两个参数");
		Complex c3 = new Complex(7.0, 7.1);
		Complex c4 = new Complex(4.0, 5.1);
		System.out.println(Complex.subtraction(c3, c4));
		
		System.out.println("乘法,一个参数");
		Complex c5 = new Complex(2.0, 3.0);
		Complex c6 = new Complex(3.0, 4.0);
		System.out.println(c5.multiplication(c6));
		
		System.out.println("乘法,两个参数");
		System.out.println(Complex.multiplication(c5, c6));
		
		System.out.println("除法,一个参数");
		Complex c7 = new Complex(7.0, 1.0);
		Complex c8 = new Complex(3.0, 4.0);
		System.out.println(c7.divide(c8));
		
		System.out.println("除法,两个参数");
		Complex c77 = new Complex(7.0, 1.0);
		Complex c88 = new Complex(0.0, 0.0);
		System.out.println(Complex.divide(c77, c88));
	}
}

 

 

 

 

 

 

 

相关文章:

  • Java装配模式
  • 归并排序(递归实现)
  • 归并排序(非递归)
  • Java中final、finally和finalize的区别
  • 归并排序(自然分组)
  • STM32概述
  • 软件工程学科的诞生
  • 软件开发过程模型综述
  • 算法设计题--数组元素换位
  • 数组换位问题-比较容易理解的解法
  • C语言形参与实参的复习
  • MySQL入门学习总结
  • 计算机存储体系简介
  • Linux基本命令个人总结
  • Makefile的简单写法总结
  • php的引用
  • [译]如何构建服务器端web组件,为何要构建?
  • CSS 专业技巧
  • Fundebug计费标准解释:事件数是如何定义的?
  • JavaScript HTML DOM
  • JavaScript服务器推送技术之 WebSocket
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • java中的hashCode
  • Js基础——数据类型之Null和Undefined
  • php的插入排序,通过双层for循环
  • python 学习笔记 - Queue Pipes,进程间通讯
  • React组件设计模式(一)
  • Spring Cloud Feign的两种使用姿势
  • Zsh 开发指南(第十四篇 文件读写)
  • 编写符合Python风格的对象
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 通过git安装npm私有模块
  • 微信支付JSAPI,实测!终极方案
  • 学习笔记:对象,原型和继承(1)
  • 云大使推广中的常见热门问题
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​低代码平台的核心价值与优势
  • #stm32驱动外设模块总结w5500模块
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (汇总)os模块以及shutil模块对文件的操作
  • (十三)Maven插件解析运行机制
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ... 是什么 ?... 有什么用处?
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET成年了,然后呢?
  • .NET程序员迈向卓越的必由之路
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)