2013-03-25 29 views
0

我正在为一家名为“客户”的公司创建一系列客户帐户。我有一个名为getGasAccount的方法,它将计算阵列中的帐户数量。通过对象实例中包含的变量而不是数组数来搜索数组?

我宣布在节目类变量为:

if (GasAccount.getGasAccount() < MAXACCOUNTS) { 
    intSelectAccount = GasAccount.getBankAccount()++; 
    customers[intSelectAccount] = new GasAccount(); 
} 

我希望能够通过这是他们的帐号来搜索客户:

final int MAXACCOUNTS = 10; 
int intNUmber, intSelectAccount; 

我使用设立账户调用构造函数时手动输入。我不想通过intSelectAcocunt /数组引用进行搜索。

如果我有一个名为displayAccountDetails方法,有没有找到帐户,而不是使用的另一种方式:

customers[intSelectAccount].displayAccountDetails(); 
+0

你使用什么编程语言?你忘了告诉我们。 – 2013-03-25 18:00:11

+0

agh oops! Java的。 – 2013-03-25 18:03:45

+0

您应该向我们展示您的客户类的代码。客户类应该有一个返回其账号的方法。您可以通过遍历客户对象的列表/数组并将每个客户的帐户ID与所讨论的帐户ID进行比较,从而通过帐户ID查找客户。 – jahroy 2013-03-25 18:22:36

回答

1

GasAccount实现equals方法这样

public boolean equals(Object objToCompare){ 
    if (objToCompare != null){ 
     return objToCompare instanceof GasAccount && ((GasAccount)objToCompare).getAccountNumber() == getAccountNumber(); 
    }else{ 
     return false; 
    } 
} 

我们找到位置GasAccount对象在数组中并显示帐户详细信息:

java.util.List<GasAccount> gasAccountsList = (java.util.List<GasAccount>)java.util.Arrays.asList(customers); 
int objectIndex = gasAccountsList.indexOf([Gas Account Object]); 
if (objectIndex != -1){ 
    gasAccountsList.get(objectIndex).displayAccountDetails(); 
} 

通过jahroy建议的帐号搜索另一个简单的办法是:

public void getAccountDetails(int accountNumber){ 
    java.util.List<GasAccount> gasAccountsList = (java.util.List<GasAccount>)java.util.Arrays.asList(customers); 
    for(GasAccount gasAccountObj : gasAccountsList){ 
     if(gasAccountObj.getAccountNumber() == accountNumber){ 
      gasAccountObj.displayAccountDetails(); 
      break; 
     } 
    } 
} 

OR

public void getAccountDetails(int accountNumber){ 
    for(GasAccount gasAccountObj : customers){ 
     if(gasAccountObj.getAccountNumber() == accountNumber){ 
      gasAccountObj.displayAccountDetails(); 
      break; 
     } 
    } 
} 
+0

我不认为你应该鼓励使用非类型列表和不必要的转换......此外,你需要传递一个参数给Arrays.asList()。 – jahroy 2013-03-25 18:19:13

+0

@jahroy感谢您指出'Arrays.asList'点。现在纠正。 – 2013-03-25 18:22:56

+0

我也会清理IDE生成的等于代码,但这只是分割头发;-) +1 – jahroy 2013-03-25 18:25:38

0

,你要的是一个HashMap的数据结构。你可以做这样的事情。

public class AccountClass{ 

    //You can fill in the details. I sounds like you know about constructors 
    //getters, setters, etc. 

    private HashMap<String, String> accountHash = new HashMap<String, String>(); 

    public HashMap<String, String> getHashMap() 
    { 
     return this.accountHash; 
    } 
} 

当您想通过帐号查找帐户时,您将可以执行类似操作。

AccountClass acct = new AccountClass(); 
acct.getHashMap().get("1234"); 

假设你实际上把你的地图帐号“1234”的条目,将返回与该键关联的值。

Here是维基百科的文章,如果你想做更多的阅读。

编辑:我还有几件事要根据一些评论添加。

如果您做了HashMap的静态这样

private static HashMap<String, String> accountHash = new HashMap<String, String>(); 

在声明静态变量,这使得它,这样你就不必实例化一个对象来访问的HashMap它可能会更好。你可以做这样的事情。

AccountClass.accountHash.get(); 

或 AccountClass.accountHash。放();

如果你想添加东西到你的HashMap,你需要使用put方法。这是一个例子。

accountHash.put("1234","My test account"). 

现在,当你使用这个, accountHash.get( “1234”); //你会得到我的测试帐户

您将获得与 “1234” 键关联的值。

请记住这个例子只是给你一个关于如何使用它的想法。你可以有一张地图,或者其他你想要的东西。

+0

使用HashMap是一个好主意。我建议演示如何填充地图(显示如何使用put)。此外,在您的示例代码中,没有理由在将'acct'分配给来自地图的对象之前创建一个新的帐户实例。您的示例代码无故创建一个新对象,然后立即丢弃它。另外...如果地图将成为'AccountClass'的一部分,它可能应该是静态的。 – jahroy 2013-03-25 18:39:55

+0

谢谢你们,有很多想法可以和你一起玩。从未使用HashMap之前,会阅读。 – 2013-03-27 11:15:11

相关问题