2013-11-01 67 views
1

林相当新的Java和我无法弄清楚,为什么我的ArrayList只返回空值!爪哇 - 我的ArrayList只返回空值

我正在开发一个地址簿应用程序,该应用程序应该存储人作为对象,它应该存储全名,地址,城市,州,邮编和电话号码,但在运行程序之后,所有存储的为空值...

人等级:

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()); 

} 

在增加一个人的末尾,则返回全部是“空”

任何帮助,将不胜感激,谢谢

+0

你似乎填充您传递到addPerson的()一个人的方法,然后分别创建一个新的实例一个人添加到数组列表中。这个新的实例被一个没有做任何事情的构造函数调用,所以它的所有值都被设置为null。 – Surveon

+0

您的Person对象似乎符合JavaBean模式,特别是,您定义了getter和setter,并且您似乎使用setter来初始化您的对象(这本质上是危险的和/或脆弱的)。如果你打算使用setter来初始化你的对象,那么你不需要在你的构造函数中传递参数。对于JavaBean模式,您应该使用无参数构造函数。 – scottb

回答

2

问题不是地址簿,而是人。不要通过一个人,也不要使用setter方法。

接下来,你要做的就是设置每个你正在为String(或INT)的值,这样你就可以在创建一个人通过考试。

最后,你需要设置字段构造函数。

1

你的构造方法还没有做任何事情。您需要将值分配给您的私有实例变量。
例如
this.FULLNAME = FULLNAME;

1

那是因为你的构造没有做任何事情。

你需要这样的事情。

public Person(String fullName, String address, String city, String state, String zip, String phone) { 
    this.fullName = fullName; 
    this.address = address; 
    ... and so on ... 
} 

请注意,我已将参数名称更改为camel case。这是为了遵守Java命名约定。

0

您的构造函数不初始化字段:

public Person(String FULLNAME, String ADDRESS, String CITY, String STATE, String ZIP, 
    String PHONE) { 
} 

应改为

public Person(String FULLNAME, String ADDRESS, String CITY, String STATE, String ZIP, 
    String PHONE) { 

    this.FULLNAME=FULLNAME; 
    this.ADDRESS=ADDRESS; 
    ... 
} 
+0

他通过调用setter方法来初始化他的对象。构造函数是多余的。 – scottb

+0

但是,当他使用:AddressBook.add(新人(全名,...这意味着新人对象,没有编写一个... ... – igr