2014-08-30 28 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 
} 
相关问题