【发布时间】:2013-11-01 19:26:57
【问题描述】:
我对 java 还很陌生,我不明白为什么我的 ArrayList 只返回 Null!
我正在开发一个地址簿应用程序,该应用程序应该将人员存储为对象,并且它应该存储全名、地址、城市、州、邮编和电话号码,但是在我运行程序之后,所有存储的内容都是空值...
人员类:
public class Person implements Comparable<Person>{
private String FULLNAME;
private String ADDRESS;
private String CITY;
private String STATE;
private String ZIP;
private String PHONE;
public Person(String FULLNAME, String ADDRESS, String CITY, String STATE, String ZIP, String PHONE) {
}
//GETTERS
public String getFullName(){
return FULLNAME;
}
public String getAddress(){
return ADDRESS;
}
public String getCity(){
return CITY;
}
public String getState(){
return STATE;
}
public String getZip(){
return ZIP;
}
public String getPhone(){
return PHONE;
}
//SETTERS
public void setFullName(String fullname){
this.FULLNAME = fullname;
}
public void setAddress(String address){
this.ADDRESS=address;
}
public void setCity(String city){
this.CITY=city;;
}
public void setState(String state){
this.STATE=state;
}
public void setZip(String zip){
this.ZIP=zip;
}
public void setPhone(String phone){
this.PHONE=phone;
}
TestAddressBook 类:
public class TestAddressBook {
static Scanner sc= new Scanner(System.in);
static String fullname;
static String address;
static String city;
static String state;
static String zip;
static String phone;
static String in;
static char input;
public static void main(String[] args){
//Declare Variables to store user input in before its sent to the
//Persons Class and stored in the Array List
//Instance of a Person
Person person = new Person(fullname, address, city, state, zip, phone);
//Declaring ArrayList
ArrayList<Person> AddressBook = new ArrayList<Person>();
//Launch Menu
do{
Menu();
//gathers user input
in=sc.nextLine();
input=in.toUpperCase().charAt(0);
//decides what to do based on user selection
switch (input){
case 'A':
addPerson(AddressBook, person);
break;
case 'D':
//deletePerson(AddressBook);
break;
case 'M':
//modifyPerson(AddressBook);
break;
case 'S':
//search(AddressBook);
break;
}
}while(input!='Q');
System.out.println("Application Closed");
System.exit(0);
}
public static void Menu(){
//User Selection
System.out.println("Address Book Menu");
System.out.println("\tEnter A to (A)dd a Person");
System.out.println("\tEnter D to (D)elete a Person");
System.out.println("\tEnter M to (M)odify a Person");
System.out.println("\tEnter S to (S)earch Address Book");
System.out.println("\tEnter Q to (Q)uit");
System.out.println("Please enter your choice");
}
public static void addPerson(ArrayList<Person> AddressBook, Person person){
System.out.println("Please input the person's information (one line per field)");
//User Input
System.out.println("\nPlease enter person's full name: ");
fullname=sc.nextLine();
person.setFullName(fullname);
System.out.println("\nPlease enter person's street address: ");
address=sc.nextLine();
person.setAddress(address);
System.out.println("\nPlease enter person's city: ");
city=sc.nextLine();
person.setCity(city);
System.out.println("\nPlease enter person's state: ");
state=sc.nextLine();
person.setState(state);
System.out.println("\nPlease enter person's zip code: ");
zip=sc.nextLine();
person.setZip(zip);
System.out.println("\nPlease enter person's phone number: ");
phone=sc.nextLine();
person.setPhone(phone);
//Set arrayList
AddressBook.add(new Person(fullname, address, city, state, zip, phone));
//test to see if values stored
System.out.println(AddressBook.get(0).getFullName());
}
在添加人员结束时,返回的都是'Null'
任何帮助将不胜感激,谢谢
【问题讨论】:
-
您似乎正在填充传递给 addPerson() 方法的 Person,然后单独创建要添加到数组列表的人员的新实例。这个新实例是用一个不做任何事情的构造函数调用的,所以它的所有值都设置为 null。
-
您的 Person 对象似乎符合 JavaBean 模式,特别是,您定义了 getter 和 setter,并且您似乎使用 setter 来初始化您的对象(这本质上是危险的和/或脆弱的)。如果你打算使用 setter 来初始化你的对象,那么你不需要在你的构造函数中传递参数。对于 JavaBean 模式,您应该使用无参数构造函数。