2013-11-01 66 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