6-1 教师、学生排序 (30 分)

6-1 教师、学生排序 (30 分)

已知Main类、Person类的设计,完成Student类,Teacher类、MyTool类的设计。

函数接口定义:

class Student extends Person{ }
class Teacher extends Person{ }

class MyTool{ public static void separateStu_T(List persons,List teachers,List students){} }
Student类继承了Person,拥有私有属性int类型的sno和String类型的major,分别代表学号与所学专业;提供对应的set,get方法;比较方法完成按照学号比较。
Teacher类继承了Person,拥有私有属性int类型的tno和String类型的subject,分别代表教师编号与所授科目;提供对应的set,get方法;比较方法完成按年龄比较。
MyTool类中提供方法public static void separateStu_T(List persons,List teachers,List students){},方法 separateStu_T的功能是将persons线性表中的 teacher,student分别放到teachers,students两个线性表中。

裁判测试程序样例:

import java.util.*;

public class Main {
	public static void main(String[] args) {

     List persons=getPersons();  //得到一个所有人的线性表
		
		List teachers=new ArrayList();
		List students=new ArrayList();
	
		MyTool.separateStu_T( persons,teachers,students); //将persons线性表中的 teacher,student分别放到teachers,students两个线性表中
		
		Collections.sort(teachers);  //对教师线性表排序
		Collections.sort(students);  //对学生线性表排序
		
		showResult(teachers);  //显示教师线性表排序以后的结果
		showResult(students);  //显示学生线性表排序以后的结果
		
	}
	
	public static List getPersons()
	{
		List persons=new ArrayList();
		
		Scanner in=new Scanner(System.in);
		Person person=null;
		
		int num=Integer.parseInt(in.nextLine());
		
		for(int i=0;i<num;i++)
		{	String str=in.nextLine();
			String []data=str.split(",");
			
			if(data[0].equalsIgnoreCase("student"))
			     person=new Student(Integer.parseInt(data[1]),data[2],data[3],Integer.parseInt(data[4]),data[5]);
			else if (data[0].equalsIgnoreCase("teacher"))
				  person=new Teacher(Integer.parseInt(data[1]),data[2],data[3],Integer.parseInt(data[4]),data[5]);
			else person=null;
			     persons.add(person);
		}
		return persons;
	}
	
	public static void showResult(List persons)
	{
		for(int i=0;i<persons.size();i++)
		{
			Person per=(Person)persons.get(i);
			System.out.println(per.getName()+","+per.getGender()+","+per.getAge());
		}
	}
}	

abstract class Person  implements Comparable
{    private String name;
     private String gender;
     private int age;
     
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getGender() {
		return gender;
	}
	
	public void setGender(String gender) {
		this.gender = gender;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Person(String name, String gender, int age) {
		super();
		this.name = name;
		this.gender = gender;
		this.age = age;
	}
}

/* 请在这里写你的代码 */

输入样例:

输入的第一行是总人数n,紧跟着输入n行,每一行代表一个人的信息。下面的例子中n=5,输入了5个人的信息。

5
student,1001,Tom1,female,18,computer
teacher,2001,Jake1,female,35,datastructer
student,1002,Tom2,male,19,computer
student,1003,Tom3,female,20,software
teacher,2002,Jake2,female,33,database

输出样例:

注意:本样例输出结果中两名教师是按照年龄升序排序的,三名学生是按照学号降序排序的。

Jake2,female,33
Jake1,female,35
Tom3,female,20
Tom2,male,19
Tom1,female,18

参考答案

class MyTool{
	public static void separateStu_T(List persons,List teachers,List students){
		Iterator It = persons.iterator();
		
		while( It.hasNext()){

			Person p= (Person) It.next();
			if(p instanceof Teacher){
				teachers.add((Teacher)(p));
			}
			else{// if( It.next() instanceof Student){
				students.add((Student)(p));
			}
		}
		
	}
}
class Student extends Person{
	private int sno;
	private String major;

	public Student(int sno, String name, String gender, int age, String major) {
		super(name, gender, age);
		this.sno = sno;
		this.major = major;
		// TODO Auto-generated constructor stub
	}

	@Override
	public int compareTo(Object arg0) {
		// TODO Auto-generated method stub
		
		return -(this.sno - ((Student)arg0).getSno());
	}

	public int getSno() {
		return sno;
	}

	public void setSno(int sno) {
		this.sno = sno;
	}

	public String getMajor() {
		return major;
	}

	public void setMajor(String major) {
		this.major = major;
	}
}

class Teacher extends Person{
	private int ton;
	private String subject;
	
	public Teacher(int tno, String name, String gender, int age, String sub) {
		super(name, gender, age);
		this.ton = ton;
		this.subject = sub;
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public int compareTo(Object arg0) {
		// TODO Auto-generated method stub
		return this.getAge() - ((Teacher)arg0).getAge();
	}
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_Hello Spring

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值