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;
}
}