java之 ------ 类的封装、继承和多态(三)

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

声明复数类如下

public class Complex {
    public double real,imag;                       //实部,虚部

    public Complex(double real, double imag)        //构造方法
    public Complex(double real)                   //构造方法重载
    public Complex()                            //构造方法
    public Complex(String s)               //构造方法,由字符串构造复制对象
    public Complex(Complex c)            //拷贝构造方法,复制对象
    public String toString()                 //对象的字符串描述,
    public double getModel()               //返回复数对象的模
    public void add(Complex c)             //两个对象相加,改变当前对象
    public static Complex add(Complex c1, Complex c2)    //返回两个对象相加后的对象,重载
    public void subtract(Complex c)                     //两个对象相减,改变当前对象
    public static Complex subtract(Complex c1, Complex c2)  //返回两个对象相减后的对象,重载
    public boolean equals(Object obj)                    //比较两个对象是否相等
}

代码实现:

import java.util.*;
class ComplexNumber{
	int really,virtual;
	public ComplexNumber(int a,int b){
		this.set(a,b);
	}
	public ComplexNumber(){
	}
	public ComplexNumber(String str){
		this.set(str);
	}
	public void set(String str){
		if(str.length()==0){
			return ;
		}
		boolean isVirtualNegat=false;
		boolean isReallyNegat=false;
		int[] a=new int[2];
		int k=0;
		for(int i=0;i<str.length();i++){
			if(str.charAt(i)=='i'){
				break;
			}
			if(str.charAt(i)=='+'||str.charAt(i)=='-'){
				if(i!=0){
					k++;
				}
				if(str.charAt(i)=='-'){
					if(i==0){
						isReallyNegat=true;
					}else{
						isVirtualNegat=true;
					}
				}
				continue;
			}
			a[k]=a[k]*10+str.charAt(i)-'0';
		}
		if(isVirtualNegat){
			a[1]*=-1;
		}
		if(isReallyNegat){
			a[0]*=-1;
		}
		this.set(a[0],a[1]);
	}
	public void set(int a,int b){
		this.really=a;
		this.virtual=b;
	}
	public boolean equals(ComplexNumber x){
		if(x.really==this.really&&x.virtual==this.virtual){
			return true ;
		}
		return false;
	}
	public ComplexNumber add(ComplexNumber x){
		ComplexNumber sum=new ComplexNumber();
		sum.really=this.really+x.really;
		sum.virtual=this.virtual+x.virtual;
		return sum;
	}
	public ComplexNumber minus(ComplexNumber x){
		ComplexNumber sum=new ComplexNumber();
		sum.really=this.really-x.really;
		sum.virtual=this.virtual-x.virtual;
		return sum;
	}
	public int  compleTo(ComplexNumber x){
		if(this.really>x.really){
			return 1;
		}else if(this.really==x.really){
			if(this.virtual>x.virtual){
				return 1;
			}else if(this.virtual==x.virtual){
				return 0;
			}else{
				return -1;
			}
		}else{
			return -1;
		}
	}
	public String toString(){
		if(this.virtual<0){
			if(this.really==0){
				return this.virtual+"i";
			}
			return this.really+"-"+-1*this.virtual+"i";
		}else if(this.virtual==0){
			return this.really+"";
		}else{
			if(this.really==0){
				return this.virtual+"i";
			}
			return this.really+"+"+this.virtual+"i";
		}
	}
}
class Main{
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		System.out.println("Please input two number`s really part and virtual part:");
		int reall1=sc.nextInt(),virtual1=sc.nextInt();
		int reall2=sc.nextInt(),virtual2=sc.nextInt();
		ComplexNumber a=new ComplexNumber(reall1,virtual1);
		ComplexNumber b=new ComplexNumber(reall2,virtual2);
		//System.out.println(a+" "+b);
		System.out.println("("+a+")"+" + ("+b+") = ("+a.add(b)+")");
		System.out.println("("+a+")"+" - ("+b+") = ("+a.minus(b)+")");
		if(a.compleTo(b)==0){
			System.out.println(a+" = "+b);
		}else if(a.compleTo(b)==1){
			System.out.println(a+" > "+b);
		}else{
			System.out.println(a+" < "+b);
		}
		System.out.println("-------------------");
		
		System.out.println("Please input two complex-number : ");
		String x=sc.next();
		String y=sc.next();
		ComplexNumber c=new ComplexNumber(x);
		ComplexNumber d=new ComplexNumber(y);
		System.out.println("("+c+")"+" + ("+d+") = ("+c.add(d)+")");
		System.out.println("("+c+")"+" - ("+d+") = ("+c.minus(d)+")");
		if(c.compleTo(d)==0){
			System.out.println(c+" = "+d);
		}else if(c.compleTo(d)==1){
			System.out.println(c+" > "+d);
		}else{
			System.out.println(c+" < "+d);
		}
	}
}


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值