对象与类训练

1.定义一个复数类Complex(数据成员:a,b表示复数a+bi).并配以合适的方法完成复数对象的生成、复数的运算(加、减、乘除),然后做一个主类测试她。

package assignment;

public class Complex {
	private double a,b;
	public double getA() {
		return a;
	}
	public void setA(double a) {
		this.a = a;
	}
	public double getB() {
		return b;
	}
	public void setB(double b) {
		this.b = b;
	}
	public static Complex createComplex(double a,double b) { //生成复数
		Complex complex=new Complex();
		complex.setA(a);
		complex.setB(b);
		return complex;
	}
	public Complex add(Complex c) {//加法
		Complex complex=new Complex();
		complex.setA(this.getA()+c.getA());
		complex.setB(this.getB()+c.getB());
		return complex;
	}
	public Complex sub(Complex c) { 	//减法
		Complex complex=new Complex();
		complex.setA(this.getA()-c.getA());
		complex.setB(this.getB()-c.getB());
		return complex;
	}
	public Complex mul(Complex c) {	//乘法
		Complex complex=new Complex();
		complex.setA(this.getA()*c.getA()-this.getB()*c.getB());
		complex.setB(this.getB()*c.getA()+this.getA()*c.getB());
		return complex;
	}
	public Complex div(Complex c) {	//除法
		Complex complex=new Complex();
		complex.setA((this.getA()*c.getA()+this.getB()*c.getB())/(c.getA()*c.getA() + c.getB()*c.getB()));
		complex.setB((this.getB()*c.getA()-this.getA()*c.getB())/(c.getA()*c.getA() + c.getB()*c.getB()));
		return complex;
	}
	public void print() {	//打印复数
		if(this.getB() > 0){
			System.out.println(this.getA() + "+" + this.getB() + "i");
		}else if(this.getB() < 0){
			System.out.println(this.getA() + "" + this.getB() + "i");
		}else{
			System.out.println(this.getA());
	}
}
}
package assignment;

import java.util.Scanner;

public class testComplex {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		double a1,b1,a2,b2;
		a1=in.nextDouble();b1=in.nextDouble();
		a2=in.nextDouble();b2=in.nextDouble();
		Complex complex1=Complex.createComplex(a1, b1);
		Complex complex2=Complex.createComplex(a2, b2);
		Complex resule_add=complex1.add(complex2);//加
		Complex resule_sub=complex1.sub(complex2);//减
		Complex resule_mul=complex1.mul(complex2);//乘
		Complex resule_div=complex1.div(complex2);//除
		resule_add.print();
		resule_sub.print();
		resule_mul.print();
		resule_div.print();
		in.close();
	}

}

2.

定义一个二次方程式ax2+bx+c=0的类:QuadraticEquation,该类的数据成员:a,b,c.

方法成员:

   1、合适的构造方法

   2、getRoot1(),getRoot2(),用于返回二次方程的2个根,该方法的返回类型是复数类Complex(该类需要你自己定义),二次方程的根的求法需自己查询资料

   3、getDiscriminant(),用于返回二次方程的判别式:b2-4ac

定义一个主类测试以上定义,要求显示给定二次方程的根

package assignment;

public class QuadraticEquation {
	private double a,b,c;
	public QuadraticEquation(double a,double b,double c) {
		this.a=a;
		this.b=b;
		this.c=c;// TODO Auto-generated constructor stub
	}
	public Complex getRoot1() {	//得到根1
		Complex complex=new Complex();
		if(getDiscriminant()>=0) {
			double x1=(-b+Math.sqrt(getDiscriminant()))/(2*a);
			complex.setA(x1);
			complex.setB(0);
		}else {
			double shibu=-b/(2*a);
			double xubu=Math.sqrt(-getDiscriminant())/(2*a);
			complex.setA(shibu);
			complex.setB(xubu);
		}
		return complex;
	}
	public Complex getRoot2() {	//得到根2
		Complex complex=new Complex();
		if(getDiscriminant()>=0) {
			double x1=(-b-Math.sqrt(getDiscriminant()))/(2*a);
			complex.setA(x1);
			complex.setB(0);
		}else {
			double shibu=-b/(2*a);
			double xubu=-Math.sqrt(-getDiscriminant())/(2*a);
			complex.setA(shibu);
			complex.setB(xubu);
		}
		return complex;
		
	}
	private double getDiscriminant() {	//判别式
		return b*b-4*a*c;
	}
}
package assignment;

import java.util.Scanner;

public class testQuadraticEquation {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double a,b,c;
		Scanner input=new Scanner(System.in);
		a=input.nextDouble();
		b=input.nextDouble();
		c=input.nextDouble();
		QuadraticEquation q=new QuadraticEquation(a, b, c);
		Complex complex1=q.getRoot1();
		Complex complex2=q.getRoot2();
		complex1.print();
		complex2.print();
		input.close();
	}

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值