在Java中搜索匿名对象的arraylist以获取这些对象中的特定变量

时间:2014-08-30 20:39:52

标签: java oop arraylist switch-statement

我有一个赋值,它创建一个包含联系信息对象的数组列表。然后我必须询问要搜索的字段和要搜索的信息。我很难搞清楚搜索部分。我试图进入每个对象并指定要搜索的变量并找到匹配项。这是我必须创建的示例输出。我的老师想要将这个代码结构用于main和DuEdAddressBook。

这是我很难搞清楚的地方。我想学习但是当你遇到困难并且书中和网上的所有例子都没有这种情况时,它会变得令人沮丧。感谢您的任何意见。

搜索方法: 接收ArrayList作为参数 输出搜索菜单(参见底部示例) 利用开关并搜索指定字段的ArrayList。 如果找到条目则返回索引号,如果未找到则返回-1

请输入名字:尼克 请输入姓氏:杜威 请输入街道地址:3232 Longridge Rd。 请输入城市,州:Del City,OK 请输入邮政编码:73115

请输入要搜索的字段:1 请输入值以搜索:Nick 名字:尼克 姓氏:杜威 街道地址:3232 Longridge Rd。 城市,州:德尔城,好的 邮编: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);
 }
}

1 个答案:

答案 0 :(得分: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
}