//TestComplexNumber.java  Copyright Lu Xiangyun(C) 2003
//5-12 根据要求编程实现复数类ComplexNumberimport java.io.*;public class TestComplexNumber
{
 public static void main(String args[])
 {
  ComplexNumber a=new ComplexNumber();
   System.out.println("用无参数的构造方法得到的复数为:"+a.toString());
  
   ComplexNumber b=new ComplexNumber(6.0,6.0);
   System.out.println("用有参数的构造方法得到的复数x为:"+ b.toString());
      
       ComplexNumber c=new ComplexNumber(9.0,9.0);
       System.out.println("用有参数的构造方法得到的复数y为:"+ c.toString());
  
       b.complexAdd(c);
       System.out.println("测试复数x与y的和为: "+ b.toString());
  
   ComplexNumber b1=new ComplexNumber(6.0,6.0);   
       b1.complexAdd(6.0);
       System.out.println("测试实数6.0与复数x的和为: "+ b1.toString());
  
   ComplexNumber b2=new ComplexNumber(6.0,6.0); 
       b2.complexMinus(c);
       System.out.println("测试复数x与y的差为: "+b2.toString());
     
   ComplexNumber b3=new ComplexNumber(6.0,6.0);           
       b3.complexMinus(6.0);
       System.out.println("测试实数6.0与复数x的差为: "+b3.toString());
  
   ComplexNumber b4=new ComplexNumber(6.0,6.0);
       b4.complexMulti(c);
       System.out.println("测试复数x与y的积为: "+b4.toString());
  
   ComplexNumber b5=new ComplexNumber(6.0,6.0);             
       b5.complexMulti(6.0);
       System.out.println("测试实数6.0与复数的积为: "+b5.toString());     }
}
class ComplexNumber
{
 
double m_dRealPart; //实部
double m_dImaginPart; //虚部
 
ComplexNumber() //无参数的构造函数,将实部和虚部都置零
{
m_dRealPart=0.0;
m_dImaginPart=0.0;
} ComplexNumber(double r,double i) //有参数的构造函数,将实部的值初始化为r,虚部的值初始化为i
{
m_dRealPart=r;
m_dImaginPart=i;
}

double getRealPart() //获得复数对象的实部
{
return  m_dRealPart;
}

double getImaginaryPart() //获得复数对象的虚部
{
return  m_dImaginPart;
}

double setRealPart(double d) //把当前复数对象的实部设置为给定的形参的数字
{
m_dRealPart=d;
return m_dRealPart;
}

double setImaginaryPart(double i) //把当前复数对象的虚部设置为给定的形参的数字
{
m_dImaginPart=i;
return m_dImaginPart;
}

ComplexNumber complexAdd(ComplexNumber c) //当前复数对象与形参复数对象相加,所得的结果也是复数值,返回给此方法的调用者
{
m_dRealPart=m_dRealPart+c.getRealPart();
m_dImaginPart=m_dImaginPart+c.getImaginaryPart();
return this;
}

ComplexNumber complexAdd(double c) //当前复数对象与形参实数对象相加,所得的结果仍是复数值,返回给此方法的调用者
{
m_dRealPart=m_dRealPart+c;
m_dImaginPart=m_dImaginPart;
return this;
}
        
        ComplexNumber complexMinus(ComplexNumber c) //当前复数对象与形参复数对象相减,所得的结果也是复数值,返回给此方法的调用者
{
m_dRealPart=m_dRealPart-c.getRealPart();
m_dImaginPart=m_dImaginPart-c.getImaginaryPart();
return this;
}

ComplexNumber complexMinus(double c) //当前复数对象与形参实数对象相减,所得的结果仍是复数值,返回给此方法的调用者
{
m_dRealPart=m_dRealPart-c;
m_dImaginPart=m_dImaginPart;
return this;
}

ComplexNumber complexMulti(ComplexNumber c) //当前复数对象与形参复数对象相乘,所得的结果也是复数值,返回给此方法的调用者
{
m_dRealPart=m_dRealPart*c.getRealPart()-m_dImaginPart*c.getImaginaryPart();
m_dImaginPart=m_dImaginPart*c.getRealPart()+m_dRealPart*c.getImaginaryPart();
return this;
}

ComplexNumber complexMulti(double c) //当前复数对象与形参实数对象相乘,所得的结果仍是复数值,返回给此方法的调用者
{
m_dRealPart=m_dRealPart*c;
m_dImaginPart=m_dImaginPart*c;
return this;
}

public String toString() //把当前复数对象的实部、虚部组合成a+bi的字符串形式,其中a和b分别为实部和虚部的数据
    {
    if(m_dImaginPart > 0)
                return(getRealPart()+" + "+getImaginaryPart() + "i"); 
else 
                if(m_dImaginPart < 0)
               return(getRealPart() + "-" + Math.abs(getImaginaryPart()) + "i");
                else
               return("" + getRealPart()); 
}

解决方案 »

  1.   

    个人意见,楼主的复数设计得确实存在问题:
    概念上就有问题,复数加减复数后还是复数,为什么要返回出String的对象.
    而且,复数相加减应该是这样的格式:c3=c1.add(c2);怎么会出现c3.add(c1,c2);
    还是理顺概念再写这个类吧.可能可以写下面的这样:
    public final class Complex {
        public Complex(double rp, double ip) {...}
        public Complex add(Complex c) {...}
        public Complex minus(Complex c) {...}
    }
    如果一定要add(c1,c2)这样的格式,那么也应该是静态方法(工具方法)
    public final class Complex {
        public static Complex add(Complex c1, Complex c2) {....}
    }