2011-11-24 86 views
0

我试图从客户对象中选择并获取值。我想要做的是输入个人号码,如“702312”,然后搜索具有等于“702312”的数据成员个人号码的客户对象。当我发现它时,我想要获取其余的值或更改它的内容。这是一些代码,用于从Customer类创建客户对象,然后将其存储在数组列表中。从Java中的arraylist中的对象方法获取值?

// create a new customer object and send personal number, name and account number to constructor 
Customer customer = new Customer(personalNumber, name, newAccountNumber); 

// create an arraylist to store customer objects 
ArrayList<Customer> customerList = new ArrayList<Customer>(); 

// add the new customer object to arraylist that holds all customer objects 
customerList.add(customer); 

我试图达到这样的值,但它不工作,所以我正在寻找一些帮助?

// search for customer 
for (Customer customer : customerList) { 
if(customer.getAccountOwnerPersonalNumber() == "702312"){ 
    System.out.println("OK!!!"); 
    } 
} 

,而不是和:

if(customer.getAccountOwnerPersonalNumber() == "702312")... 

我已经试过这样:

if(customer.personalNumber == "702312")... 

最后我也测试了它这样的:

for(int i=0;i<customerList.size();i++){ 
    if(customerList.get(i).getAccountOwnerName() == "702312"); 
    System.out.println("OK"); 
    break; 
} 

我不是当然,如果我做对了!?帮助是preciated!谢谢!

+0

什么类型返回.getAccountOwnerName()函数?我认为你试图比较数字和字符串... – Gatekeeper

+0

你没有正确调用'System.out.println'方法。空格必须包围括号,如下所示:'System.out.println(“OK”);' – Michael

+0

@Michael:你在开玩笑吗? – BalusC

回答

5

您需要使用equals()方法,通过其内在价值比较对象String S(否则他们将只能通过参考比较):

if (customer.getAccountOwnerPersonalNumber().equals("702312")) { 
    System.out.println("OK!!!"); 
} 

,或者更好,如果可以潜在回报null

if ("702312".equals(customer.getAccountOwnerPersonalNumber())) { 
    System.out.println("OK!!!"); 
} 

或(如适用),只是让一个PRI mitiveint,使==一定会给你想要的方式:

private int accountOwnerPersonalNumber; 

if (customer.getAccountOwnerPersonalNumber() == 702312) { 
    System.out.println("OK!!!"); 
} 
+0

谢谢!等于它工作得很好!但是,如何获取个人数量等于“702312”的对象中剩余的对象数据成员? –

+0

只需将它们收集到循环内的另一个'List'中即可。问问一个新问题,如果你stucks。 – BalusC

+0

我不确定我是否理解你的答案,我卡住了!你有时间展示一些代码吗? –

1

你想.equals():

if(customerList.get(i).getAccountOwnerName().equals("702312")) 
1

customer.getAccountOwnerPersonalNumber() == "702312"这是不对的,你不能比较它们,因为它会比较它们的对象类型。你应该做这样的

if(customer.getAccountOwnerPersonalNumber().equals("702312")) 

or this is better 

if("702312".equals(customer.getAccountOwnerPersonalNumber())) 
0

如果您查询的数据是一个字符串,然后你必须使用 equals()方法

所以整个事情会变成那种情况下是

if(customer.getAccountOwnerPersonalNumber()。equals(“702312”)){System.out.println(“OK !!!”); }

0

您正试图对比客户。personalNumber“702312”这是一个字符串,所以我得出结论customer.personalNumber也是一个字符串。 如果我是对的,请尝试String.equals()方法而不是==运算符。这是因为这个运算符比较对象而不是值,这是你想要的。

if(customer.getAccountOwnerPersonalNumber().equals("70312");) 
    ... 
0

我会建议你使用java.util.CollectionsbinarySearch(...)方法。它的顺序是O(log n)(在这种情况下,因为ArrayList实现了RandomAccess)这比你在for循环中得到的O(n)顺序要好很多。

您可以为所需的客户领域(一个或多个)独立的比较器(在这种情况下,“personalNumber”):

private static class CustomerPersonalNumberComparator implements Comparator<Customer> { 

     @Override 
     public int compare(Customer o1, Customer o2) { 
      return o1.getPersonaNumber().compareTo(o2.getPersonaNumber()); 
     } 

    } 

另外,不要忘记根据所需的搜索条件来排序列表它使用二进制搜索之前(比较器):

Collections.sort(customerList,new CustomerPersonalNumberComparator()); 
int desiredIndex = Collections.binarySearch(customerList, new Customer("658",null,null), new CustomerPersonalNumberComparator()); 
Customer desiredCustomer = desiredIndex == -1 ? null : customerList.get(desiredIndex); 

而且不要忘记,二进制搜索返回位置我们的阵列内的所需的元素或-1,如果什么也没有找到。所以你必须使用返回的位置从列表中检索所需的实例。

相关问题