2014-08-30 61 views
0

我有一個任務可以創建一個保存聯繫人信息對象的數組列表。然後我必須詢問要搜索哪個字段以及要搜索的信息。我很難找出搜索部分。我試圖進入每個對象,並指定要搜索和找到匹配的變量。這是我必須創建的示例輸出。我的老師想要爲主要和DuEdAddressBook使用這種代碼結構。在Java中搜索匿名對象的數組列表以查找這些對象中的特定變量

這是我很難找到的地方。我想學習,但是當你陷入困境時,書中和在線的所有例子都沒有這種類型的場景,這讓人感到沮喪。感謝您的任何意見。

搜索方法: 接收的ArrayList作爲參數 輸出搜索菜單(參見實施例在底部) 利用一個開關和搜索的ArrayList指定字段。如果條目中找到或-1,如果沒有找到

返回索引號請輸入名字:尼克 請輸入姓氏:杜威 請輸入街道地址:3232朗裏奇路。 請輸入城市,州:德爾城,OK 請輸入郵編:73115

請輸入要搜索的字段:1 請輸入要搜索的值:尼克 名字:尼克 姓:杜威 街地址:3232 Longridge Rd。 城市,州:Del City,OK 郵編:73115

這是我的代碼到目前爲止。

import java.util.ArrayList; 
import java.util.Scanner; 

public class DurrieEdwardChapter10 
{ 
    public static void main(String[] args) 
{ 
    Scanner stdIn = new Scanner(System.in); 
    String a,b,c,d,e; 
    ArrayList<DuEdAddressBook> aBook = new ArrayList<DuEdAddressBook>(); 

    for (int count = 0; count < 1; count++) 
    { 
    DuEdAddressBook entry = new DuEdAddressBook(); 
    System.out.print("Please Enter First Name: "); 
    a = stdIn.nextLine(); 
    System.out.print("Please Enter Last Name: "); 
    b = stdIn.nextLine(); 
    System.out.print("Please Enter Street Address:"); 
    c = stdIn.nextLine(); 
    System.out.print("Please Enter City, State:"); 
    d = stdIn.nextLine(); 
    System.out.print("Please Enter Zip Code:"); 
    e = stdIn.nextLine(); 
    entry.addEntry(a,b,c,d,e); 
    aBook.add(count,entry); 
    } 
    int foundIndex = DuEdAddressBook.search(aBook); 
    System.out.println(); 
    if (foundIndex > -1) 
    { 
    aBook.get(foundIndex).display(); 
    } 
    else 
    { 
    System.out.println("No Entry Found"); 
    } 
} 
} 

import java.util.ArrayList; 
import java.util.Scanner; 
public class DuEdAddressBook 
{ 
    String first; 
    String last; 
    String street; 
    String state; 
    String zip; 

public DuEdAddressBook() 
{ 
} 
public DuEdAddressBook(String a, String b, String c, String d, String e) 
{ 
    first = a; 
    last = b; 
    street = c; 
    state = d; 
    zip = e; 
}  
public void addEntry(String a,String b,String c,String d, String e) 
{ 
    first = a; 
    last = b; 
    street = c; 
    state = d; 
    zip = e; 
} 
public static int search(ArrayList<DuEdAddressBook> a) 
{ 
    Scanner stdIn = new Scanner(System.in); 
    String searchNum; 
    String searchValue; 
    System.out.print("Please Enter Field to Search:"); 
    searchNum = stdIn.nextLine(); 
    System.out.print("Please Enter Value to Search For:"); 
    searchValue = stdIn.nextLine(); 
    int n = 0; // index of search result 
    return n; 
} 
public void display() 
{ 
    System.out.println("First Name:" + first); 
    System.out.println("Last Name:" + last); 
    System.out.println("Street Address:" + street); 
    System.out.println("City,State:" + state); 
    System.out.println("Zip Code:" + zip); 
} 
} 

回答

0

最簡單的方法恕我直言,是通過反射找到對象。
迭代對象列表並分析其字段值。

之類的東西:

Field[] fields = DuEdAddressBook.class.getFields(); //or getDeclaredFields() 
for (Field f : fields) 
{ 
    String fieldName = f.getName(); 
    Object fieldValue = f.getValue(theDuEdObjectToAnalyze); 
    //here you can compare the fieldvalue with the value the user entered 
} 
相關問題