jmu-Java-PTA题解 (exam02-通讯录生成) 网安2312陈卓
问题要求
创建一个Person类来存放联系人信息,其中包含以下属性
String name
int age
String phoneNumber
String address
要求编写getter/setter()方法,toString()方法
Main函数中:
输入整数n
然后输入n个name,age,phoneNumber,address,生成相应的person对象。
最后要求按姓名升序进行通讯录信息的输出。
输入格式:
输入整数n
输入n行的name,age,phoneNumber,address
输出格式:
按照姓名升序进行输出
输入样例:
5
Tina 18 123456 jmu
Alias 20 234567 smu
Mike 19 345678 CN
Bob 33 456789 USA
Blobg 21 567890 India
输出样例:
Person [name=Alias, age=20, phoneNumber=234567, address=smu]
Person [name=Blobg, age=21, phoneNumber=567890, address=India]
Person [name=Bob, age=33, phoneNumber=456789, address=USA]
Person [name=Mike, age=19, phoneNumber=345678, address=CN]
Person [name=Tina, age=18, phoneNumber=123456, address=jmu]
关键点
- Comparable接口的运用:Person类实现了Comparable
接口,并重写了compareTo方法,按照姓名进行比较。这样就能使用Collections.sort方法对Person对象列表按姓名升序排序。 - 数据输入与对象创建:借助Scanner类从控制台读取输入,每读取一行数据就创建一个Person对象,并将其添加到ArrayList中。
- 对象信息输出:重写toString方法,按指定格式输出Person对象的信息。
解题步骤
第一步:编写Person类
定义Person类,包含私有属性name、age、phoneNumber和address。提供构造函数用于初始化属性,同时实现各个属性的getter方法和toString方法。让Person类实现Comparable
class Person implements Comparable<Person>{
String name;
int age;
String phoneNumber;
String address;
public Person(String name, int age, String phoneNumber, String address){
this.name = name;
this.age = age;
this.phoneNumber = phoneNumber;
this.address = address;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public String getPhoneNumber(){
return phoneNumber;
}
public String getAddress(){
return address;
}
public String toString(){
return "Person [name="+name+", age="+age+", phoneNumber="+phoneNumber+", address="+address+"]";
}
public int compareTo(Person other){
int namecompareTo = this.name.compareTo(other.name);
return namecompareTo;
}
}
第二步:编写main方法
在main方法中,通过Scanner读取输入的联系人数量n,再循环读取n行联系人信息数据,每行数据创建一个Person对象并添加到ArrayList中。最后使用Collections.sort方法对列表进行排序,遍历列表并输出每个Person对象的信息。
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
ArrayList<Person> arr = new ArrayList<Person>();
int n = in.nextInt();
for(int i=0; i<n; i++){
Person e = new Person(in.next(), in.nextInt(), in.next(), in.next());
arr.add(e);
}
Collections.sort(arr);
for(Person i:arr){
System.out.println(i.toString());
}
}
}
整体流程图:

整体代码:
import java.util.Scanner;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
class Person implements Comparable<Person>{
String name;
int age;
String phoneNumber;
String address;
public Person(String name, int age, String phoneNumber, String address){
this.name = name;
this.age = age;
this.phoneNumber = phoneNumber;
this.address = address;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public String getPhoneNumber(){
return phoneNumber;
}
public String getAddress(){
return address;
}
public String toString(){
return "Person [name="+name+", age="+age+", phoneNumber="+phoneNumber+", address="+address+"]";
}
public int compareTo(Person other){
int namecompareTo = this.name.compareTo(other.name);
return namecompareTo;
}
}
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
ArrayList<Person> arr = new ArrayList<Person>();
int n = in.nextInt();
for(int i=0; i<n; i++){
Person e = new Person(in.next(), in.nextInt(), in.next(), in.next());
arr.add(e);
}
Collections.sort(arr);
for(Person i:arr){
System.out.println(i.toString());
}
}
}
思考:从接口实现的角度来看,Person类实现Comparable

浙公网安备 33010602011771号