Java——第二次上机(第二部分)

编辑时间:2021.10.2

7-5 复数类的定义

编写一个复数类,可以进行复数加法和减法运算。编写一个包含main方法的类测试该复数类。要求该复数类至少包含一个无参的构造方法和一个带参的构造方法;数据成员包括复数的实部和虚部,为double类型;包括两个方法,分别实现复数的加法和减法运算。测试代码如下:

public static void main(String [] args){
        Complex a=new Complex();
        Complex b=new Complex();
        Scanner in=new Scanner(System.in);
        a.setRealPart(in.nextDouble());
        a.setImaginaryPart(in.nextDouble());
        b.setRealPart(in.nextDouble());
        b.setImaginaryPart(in.nextDouble());
        System.out.println(a);
        System.out.println(b);
        System.out.println(a.add(b));
        System.out.println(a.sub(b));       }

输入格式:
输入两个复数。输入为两行,每一行为一个复数的实部和虚部,用空格隔开。

输出格式:
输出复数加法和减法结果。输出为4行,第一行和第二行输出两个复数,第三行为两个复数的加法运算结果,第四行为减法运算结果。

输入样例:
在这里给出两组输入。例如:

1 2
3 4

-1 2
1 2

输出样例:
在这里给出相应的输出。例如:

1.0+2.0i
3.0+4.0i
4.0+6.0i
-2.0-2.0i

-1.0+2.0i
1.0+2.0i
4.0i
-2.0

代码如下:


import java.util.*;
class Complex{
	double real;
	double image;
	Complex(){};
	public Complex(double r,double im) {
		real=r;
		image=im;
	}
	public void setRealPart(double r) {
		real=r;
	}
	public void setImaginaryPart(double im) {
		image=im;
	}	
	public Complex add(Complex p) {
		return new Complex(real+p.real,image+p.image);
	}
	public Complex sub(Complex p) {
		return new Complex(real-p.real,image-p.image);
	}
	public String toString() { //toString()方法
		if(real==0&&image==0) {
			return 0+"";
		}else if(real==0&&image!=0) {
			return image+"i";
		}else if(real!=0&&image>0) {
			return real + "+" + image + "i";
		}else if(real!=0&&image==0) {
			return real+"";
		}else {
			return real +""+ image + "i";			
		}

	}
}
public class Main {
    public static void main(String [] args){
        Complex a=new Complex();
        Complex b=new Complex();
        Scanner in=new Scanner(System.in);
        a.setRealPart(in.nextDouble());
        a.setImaginaryPart(in.nextDouble());
        b.setRealPart(in.nextDouble());
        b.setImaginaryPart(in.nextDouble());
        System.out.println(a);
        System.out.println(b);
        System.out.println(a.add(b));
        System.out.println(a.sub(b));      
    }
}

7-6 Employee类的层级结构

定义四个类,分别为Employee类、SalariedEmployee类、HourlyEmployee类和CommissionEmployee类。其中Employee类是其他三个类的父类。Employee类包含姓名和身份证号。

除此之外,SalariedEmployee类还应包含每月工资;HourlyEmployee类还应包含每小时工资数和工作时间数;CommissionEmployee还应包含提成比例和销售总额。其中HourlyEmployee的工资为:每小时工资数×工作时间数,CommissionEmployee的工资为:提成比例×销售总额。每个类都应有合适的构造方法、数据成员的设置和读取方法。编写一个测试程序,创建这些类的对象,并输出与对象相关的信息。注意子类有时需调用父类的构造方法和被覆盖的方法,成员变量定义为private,对有些方法实现重载。

测试程序如下所示:

public static void main(String [] args){
   Scanner in=new Scanner(System.in);
   Employee [] e=new Employee[3];
   e[0]=new SalariedEmployee(in.next(),in.next(),in.nextDouble());
   e[1]=new HourlyEmployee(in.next(),in.next(),in.nextDouble(),in.nextDouble());
   e[2]=new CommissionEmployee(in.next(),in.next(),in.nextDouble(),in.nextDouble());
   for(int i=0;i<e.length;i++)
   {    
       System.out.println(e[i].getSalary());
       System.out.println(e[i]);
   }
 }

输入格式:
输入三行。第一行为一个SalariedEmployee对象的姓名,身份证号和每月工资。第二行为一个HourlyEmployee对象的姓名、身份证号、每小时工资数、工作时间。第三行为一个CommissionEmployee对象的姓名、身份证号、提成比例和销售总额。

输出格式:
输出三个对象的工资和对象的其他信息。每一个对象输出两行,第一行为工资,第二行为对象的信息。

输入样例:

Mike 0001 5000
Jack 0002 20 300
Tom 0003 0.2 50000

输出样例:

5000.0
SalariedEmployee[name=Mike,id=0001][monthSalary=5000.0]
6000.0
HourlyEmployee[name=Jack,id=0002][hourSalary=20.0,workhour=300.0]
10000.0
CommissionEmployee[name=Tom,id=0003][commissionRatio=0.2,sale=50000.0]

代码如下:


import java.util.*;
class Employee{
	String name;
	String id;
	Employee(){};
	public Employee(String n,String i) {
		name=n;
		id=i;
	}
	public void show() {

	}
}
class SalariedEmployee extends Employee{
	double money;
	SalariedEmployee(){};
	public SalariedEmployee(String n,String i,double m) {
		//Employee(n,i);
		super(n,i);
		money=m;
	}
	public void show() {
		System.out.println(money);
		System.out.println("SalariedEmployee[name="+name+",id="+id+"][monthSalary="+money+"]");
	}
}
class HourlyEmployee extends Employee{
	double h_money;//每小时工资数
	double time;//工作时间
	HourlyEmployee(){};
	public HourlyEmployee(String n,String i,double h_m,double t) {
		super(n,i);
		h_money=h_m;
		time=t;
	}
	public void show() {
		System.out.println(h_money*time);
		System.out.println("HourlyEmployee[name="+name+",id="+id+"][hourSalary="+h_money+",workhour="+time+"]");
	}
}
class CommissionEmployee extends Employee{
	double sc;//提成比例
	double m_money;//销售总额
	CommissionEmployee(){};
	public CommissionEmployee(String n,String i,double s,double m_m) {
		super(n,i);
		sc=s;
		m_money=m_m;
	}
	public void show() {
		System.out.println(sc*m_money);
		System.out.println("CommissionEmployee[name="+name+",id="+id+"][commissionRatio="+sc+",sale="+m_money+"]");
	}
}
public class Main {
    public static void main(String [] args){
        Scanner in=new Scanner(System.in);
        Employee [] e=new Employee[3];
        e[0]=new SalariedEmployee(in.next(),in.next(),in.nextDouble());
        e[1]=new HourlyEmployee(in.next(),in.next(),in.nextDouble(),in.nextDouble());
        e[2]=new CommissionEmployee(in.next(),in.next(),in.nextDouble(),in.nextDouble());
        for(int i=0;i<e.length;i++)
        {    
            //System.out.println(e[i].getSalary());
            //System.out.println(e[i].show());
        	e[i].show();
        }
 }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白吧啦吧啦

小白白,您的打赏是我的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值