(完成版)声明复数类,成员变量包括实部和虚部,成员方法包括实现由字符串构造复数、复数加法、减法,字符串描述、比较相等等操作。

现在只能实现实部和虚部都存在的情况,答案的格式也暂时没有升级。

有了加法可以相应的拓展减法,比较相等;

大体分了几个思路,先判断有没有“i”,如果没有就啥也别说了,肯定只有实部;

如果有,再看几种情况,这几种情况已经写注释了。

感觉分的有点过多了,以后有空再优化吧,得准备别的了

!!!!!!!升级了,额可能还是挺长的,我这用的StringBuffer可以进行字符的增加和删除,因为String类不能这么干;

我写的这个只能实现输入 a+bi,  a , bi,判定出来这是复数三种方式,没有写bi+a的了,如果要实现bi+a还得写好多可能,我也没试;也可以实现只输出  1+i , i ,1-i这种了;

代码比较麻烦,感觉自己太菜了不知道怎么优化了(后来去整那个正则表达式的做法了(*^▽^*))


import java.util.Scanner;
public class Complex {
	public int Real,Vir;
	public static void main(String[] args) {
		String com;
		Scanner in = new Scanner(System.in);
		System.out.println("输入第一个复数");
		com = in.next();
		Complex first = new Complex(com);
		first.say_Itself();
		System.out.println("输入第二个复数");
		com = in.next();
		Complex second = new Complex(com);
		second.say_Itself();
		first.add(second);
		first.diff(second);
		first.lenth(second);
		System.out.println(first.equals(second));
	}
	public Complex(){//初始化这个,在这可以不用写了,因为都得输入字符串
		this.Real = 0;
		this.Vir = 0;
	}
	public Complex(String s)//有点小乱
	{	
		int flag=0;
		int live_i=0;
		char temp[] = s.toCharArray();
		StringBuffer Real = new StringBuffer();
		StringBuffer Vir = new StringBuffer();
		char op1='+',op2='+';
		if(s.indexOf('i')!=-1){//有虚部
			if(s.indexOf('+')!=-1||s.lastIndexOf('-')>0)//有“+”号必有两部,有减号且最后一个减号不是第一个位置也说明都有
			{
				if(temp[0]=='-'){//记录第一个数的符号	
					op1='-';
					flag=1;
				}
				int i=flag;
				for(;i0)
				{
					if(Vir_==1)//虚部为1
					{
						put.append("+i");
					}else {
						put.append("+"+Vir_+"i");
					}
				} else if(Vir_<0)
				{
					if(Vir_==-1)//虚部为-1
					{
						put.append("-i");
					}else {
						put.append(Vir_+"i");
					}
				}
			}
		}else//不存在实部
		{
			if(Vir_!=0)//只有虚部
			{
				if(Vir_==-1)
				{
					put.append("-i");
				}else if(Vir_==1)
				{
					put.append("i");
				}else
				{
					put.append(Vir_+"i");
				}
			}else//虚部都没有
			{
				put.append("0");
			}
		}
		System.out.println(put);
	}
	public void lenth(Complex other)//计算模长,sqrt这个算的不是特别准
	{
		int x_len,y_len;
		x_len=this.Real-other.Real;
		y_len=this.Vir-other.Vir;
		System.out.println("长度是"+String.format("%.2f", Math.sqrt(x_len*x_len+y_len*y_len)));
	}
	public boolean equals(Complex other)
	{
		return this.Real==other.Real&&this.Vir==other.Vir;
	}

}

 

你可能感兴趣的:(JAVA)