3-1 jmu-java-m03-简易通讯录1 (类的使用,setter,getter,compareTo内部比较)

3-1 jmu-java-m03-简易通讯录1 (10分)
为通讯录定义一个代表人的Person类来存储联系人信息,该类需要包含以下几个属性: int id, String name, String phoneNumber, String address

编写一个无参构造函数
要求在无参构造函数中输出"This is a no-argument constructor"

编写有参构造函数Person(int id)
要求在其中为id赋值,并输出"This is a single parameter constructor"

编写有参构造函数Person(int id, String name, String phoneNumber, String address)
要求在其中为 id, name, phoneNumber赋值,并输出"This is a multi-parameter constructor"

对每个属性生成getter/setter方法

覆盖toString函数,其中按照格式”类名 [id=, name=, phoneNumber=, address=]”进行输出,建议使用使用eclipse自动生成。

在main方法中:

使用无参构造函数创建一个Person对象,调用setter方法依次对id,name,phoneNumber,address进行赋值
输入一个整数,作为id值使用单参构造函数创建一个Person对象
输入id name phoneNumber address调用多参构造函数创建一个Person对象
对三个Person对象的id大小进行比较,按升序顺序输出三个对象
输入格式:
输入id name phoneNumber address为调用对象赋值

输入id调用单参构造函数创建对象

输入id name phoneNumber address调用多参构造函数创建对象

输出格式:
排序后的三个person对象

输入样例:
5 zhangsan 123123 jmu
3
7 lisi 78979 jmu

输出样例:
This is a no-argument constructor
This is a single parameter constructor
This is a multi-parameter constructor
Person [id=3, name=null, phoneNumber=null, address=null]
Person [id=5, name=zhangsan, phoneNumber=123123, address=jmu]
Person [id=7, name=lisi, phoneNumber=78979, address=jmu]

import java.util.Arrays;
import java.util.Scanner;

public class Main 
{
	 public static void main(String[] args) {
		 Scanner sc=new Scanner(System.in);
		 Person p =new Person();
		 p.setId(sc.nextInt());
		 p.setName(sc.next());
		 p.setPhoneNumber(sc.next());
		 p.setAddress(sc.next());
		 
		 int n=sc.nextInt();
		 Person p2 = new Person(n);
		 Person p3 = new Person(sc.nextInt(), sc.next(),sc.next(), sc.next());
		 
		 
//	将对象存放在一个(静态初始化)数组内
//	声明形式:数据类型 [] 数组名=new 数据类型[长度];
//	对象的数组类型是Person
		  Person[] sta=new Person[3];
		  sta[0]=p;
		  sta[1]=p2;
		  sta[2]=p3;
		  Arrays.sort(sta);	//	对数组进行排序,需要实现Comparable接口
		  for(int i=0;i<sta.length;i++)
		  {
			    System.out.println(sta[i]);
		  }
		
	

	 }
 }
//为通讯录定义一个代表人的Person类来存储联系人信息
class Person implements Comparable//内部比较器,要用compareTo方法
//class Person
{
	private int id;
	private String name;
	private String phoneNumber;
	private String address;
	//构造方法	,就是用来专门进行对象初始化的,如果一个构造函数要调用另一个就要在第一行用this(参数);
	public Person() {
		System.out.println("This is a no-argument constructor");
	}
	public Person(int id)
	{
		this.id=id;
		System.out.println("This is a single parameter constructor");
	}
	public Person(int id, String name, String phoneNumber, String address)
	{
		this.id=id;
		this.name=name;
		this.phoneNumber=phoneNumber;
		this.address=address;
		System.out.println("This is a multi-parameter constructor");
	}
	//对每个属性生成getter/setter方法,可以自动生成
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPhoneNumber() {
		return phoneNumber;
	}
	public void setPhoneNumber(String phoneNumber) {
		this.phoneNumber = phoneNumber;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
//覆盖toString函数,其中按照格式"类名 [id=, name=, phoneNumber=, address=]"进行输出
	public String toString() {
        return String.format("Person [id=%d, name=%s, phoneNumber=%s, address=%s]", id,name,phoneNumber,address);
    }
//	通过compareTo实现数组的排序
	public int compareTo(Object o) {
	//	传递对象Object的参数
	//	instance的作用是判断其左边对象是属于其右边类的一个例,返回值boolean类型。
	//	staff是一个类,object是传进来的一个对象。格式: 对象 instanceof 类
		if(o instanceof Person) {
		//	o是一个object类型的对象,此时Object并没有id这个属性,因此要向下转型为Person类型的
			Person s=(Person)o;
		//	对传进来的参数进行判断
			return this.id-s.id;
			//	传进来p分别与Person中其他做比较,
			//	差值越大,数值越大,因此在通过Sort对id做一个排序,在打印即可。
		}
		return 0;
	}


}





你可能感兴趣的:(3-1 jmu-java-m03-简易通讯录1 (类的使用,setter,getter,compareTo内部比较))