Java的Complex复数类计算并逐步优化

Java实现Complex复数类的加减乘除

  • 实现Complex类的成员以及构造方法还有get( )和set()方法
  • 进行加法减法的编写,确定加法和减法的参数 以及方法的public protected 和 private的属性
  • 对乘法除法进行相同的思路分析
  • 还有对to String ()方法进行重写
  • 对equals()方法进行重写,使之成为判断Complex类的相等判断方法
  • 接下来看一看我们的构造方法以及我们的重写的方法
public class Complex {
	private  double real;
	private  double vir;
	
	public Complex(double real,double vir) {
		this.real=real;
		this.vir=vir;
	}
	public Complex() {
		this(0.0,0.0);
		
	}
	public Complex(Complex c) {
		this(c.real,c.vir);
	}
	public Complex(double vir) {
		this.real=0.0;
		this.vir=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;
	}
	}
	

看看我们写的重写方法:

public boolean equals(Object obj) {
		if(null==obj) {						//传入的对象为空
			return false;	
		}
		if(!(obj instanceof Complex)) {		//不是同一种类
			return false;
		}
		if((this == obj)) {					//两个首地址直接是相等的 ,两个类相等
			return true;
			
		}
		Complex c=(Complex) obj;
		return Math.abs(this.real-c.real)<1e-6 && Math.abs(this.vir-c.vir)<1e-6;
	}

这里穷尽了实部的虚部的各种情况,进行合理的输出:

public String toString() {
		if(this.vir ==0&&Math.abs(real)>1e-6) {
			return real+"";
		}
		if(this.vir==1&&Math.abs(real)>1e-6) {
			return real+"+"+"i";
		}
		if(vir<0&&Math.abs(real)>1e-6) {
			if(vir==-1) {
				return real+"-"+"i";
			}
			return real+"-"+(-vir)+"i";
		}
		if(Math.abs(real)<10e-6&&Math.abs(vir)<1e-6) {
			return "0.0";
		}
		if(Math.abs(real)<10e-6&&vir==-1 ) {
		return "-i";
		}
		if(Math.abs(real)<10e-6&&vir==1 ) {
			return "i";
			}
		if(Math.abs(real)<10e-6) {
			return vir+"i";
			}
		return real+"+"+vir+"i";
		}

  • 接下来进行add()方法的编写 ,属性为public的,现在考虑只有一个参数的情况,通过对象来调用add(),将两个Complex相加
  • 另一种情况是双参数的方法,及两个参数之间进行相加,这时候要注意调用相关方法时,如果在通过一个对象来进行调用的话,语句可能会出现从c1.add(c2,c3); 这样会看着比较奇怪,所以我们将add()双参方法设置成为static属性的,这样就可以直接用类名来调用add()函数,Complex.add(c1,c2);
  • 我们来看看代码:
	public void  add(Complex one) {
		this.vir+=one.vir;
		this.real+=one.real;
	}
	public static Complex add(Complex one,Complex two) {
		one.vir+=two.vir;
		one.real+=two.real;
		return one;
	}


接下来进行减法的设计,和加法同理,不过我们想调用工具,于是做一个求相反数的类。

public static Complex sub(Complex one,Complex two) {
	return add(one, opposite(two));	
}
public static Complex opposite(Complex one) {
		return new Complex(-one.real,-one.vir);	
	}
  • 乘除与加减类似,我们打算用一个求倒数的方法来让我们调用:
public  static Complex multiply(Complex one,Complex two) {
		double c=one.real;
		one.real=one.real*two.real-two.vir*two.vir;
		one.vir=c*two.vir+one.vir*two.real;
		return one;
	}
	
	public static Complex reciprocal(Complex a) {
		int model =(int) (a.real*a.real+a.vir*a.vir);
		if(Math.abs(model)<10e-6)
			return null;
		else {
		a.real=a.real/model;
		a.vir=a.vir/model;
		return a;	
		}
	}
	public static Complex divide(Complex one,Complex two) {
		Complex c=reciprocal(two);
		return  c==null ?null: multiply(one,c);
	}
	

这样我们就设计好了一个类,虽然不算完备,但已经实现了该有的加减乘除方法。
也具备一定的工具思想!

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务