在复数类中,加减乘除各用两种方法实现。举个例子,就比如a = b + c和a += b;
在该复数类中,用到了static修饰符,如此,被修饰的方法可以用类名通过圆点运算符直接调用。可以解决没有对象调用的问题。用类名直接调用,传入两个参数。
减法利用加法实现,除法利用乘法实现。
在除法中,如果除数为0,则会抛出异常。
编写了四种构造方法:无参,单参,双参以及直接传入一个复数。使用this()的方法调用双参构造函数完成无参和单参构造。
并实现了getter和setter方法,以便取得和注入初值。
重载了toString方法,自定义输出形式。
可以实现复数的加减乘除。因为有a += b这类方法,使得不光可以实现两个复数的运算,还可以实现连加,连乘等操作。
具体代码如下:
/*
* @auther-yc
* 2018/9/23
*/
package ;
public class Complex {
//定义两个全局变量,分别表示复数的实部和虚部;
private double row;
private double col;
//无参构造
public Complex() {
//使用this()方法调用双参构造,使得默认初始值为0.0 + 0.0i;
this(0.0, 0.0);
}
public Complex(double row) {
this(row, 0.0);
}
public Complex(Complex complex) {
this(, );
}
public Complex(double row, double col) {
(row);
(col);
}
//实现一系列的getter和setter方法;
public double getRow() {
return row;
}
public void setRow(double row) {
= row;
}
public double getCol() {
return col;
}
public void setCol(double col) {
= col;
}
//该方法可取得一个复数的相反数,这样就可以利用加法来实现减法运算。
public static Complex opposite(Complex complex) {
= - ;
= - ;
return complex;
}
//该方法可取的一个复数的倒数,这样就可以利用乘法来实现除法运算。
public static Complex reciprocal(Complex complex) {
double row = () / ( * + * );
double col = (-) / ( * + * );
return new Complex(row, col);
}
//a = b + c;将该方法定义为静态,可以使用类名直接调用,然后输出结果。不用新定义一个复数去接收其和值;
//且该方法实质上是用其中一个参数调用单参的加法实现。
public static Complex add(Complex one, Complex another) {
return new Complex(one).add(another);
}
//a += b;
public Complex add(Complex one) {
+= ;
+= ;
return this;
}
//a = b - c;
public static Complex sub(Complex one, Complex another) {
return new Complex(one).add(opposite(another));
}
public Complex sub(Complex complex) {
return (opposite(complex));
}
//a = b * c;
public static Complex mul(Complex one, Complex another) {
return new Complex(one).mul(another);
}
//a *= b;
public Complex mul(Complex complex) {
double row = ;
= * - * ;
= row * + * ;
return this;
}
//a /= b;此处抛出自定义的异常“除零错”,当传入的参数作为除数运算是就会报异常!
public Complex div(Complex complex) throws DivideZeroException {
if((() < 1e-6) && (() < 1e-6)) {
throw new DivideZeroException("除零错");
}
return new Complex((reciprocal(complex)));
}
//a = b / c;
public static Complex div(Complex one, Complex another) throws DivideZeroException {
if((() < 1e-6) && (() < 1e-6)) {
throw new DivideZeroException("除零错");
}
return new Complex(one).mul(reciprocal(another));
}
//重载toString方法,可以按自定义的格式输出;
@Override
public String toString() {
return "(" + row + ", " + col + ")";
}
}
/*
* 异常类
* @auther-yc
* 2018/9/23
*/
package ;
public class DivideZeroException extends Exception {
private static final long serialVersionUID = -917710262683840175L;
public DivideZeroException() {
}
public DivideZeroException(String arg0, Throwable arg1, boolean arg2, boolean arg3) {
super(arg0, arg1, arg2, arg3);
}
public DivideZeroException(String arg0, Throwable arg1) {
super(arg0, arg1);
}
public DivideZeroException(String arg0) {
super(arg0);
}
public DivideZeroException(Throwable arg0) {
super(arg0);
}
}