如何使用指定为参数的帐号搜索帐户的arraylist帐户

时间:2014-11-11 11:44:31

标签: java arraylist

我的代码编译但无论我输入什么,正确与否都返回-1

public int search(String accountNumber){
       int index = 0;
       boolean found = false;

       for (Account account : accounts )
            while(index < accounts.size() && !found)
                if (accounts.get(index).equals (accountNumber)) 
                    found = true;  

                else 
                    index++;

        if (found == true)
            return index;
        else
            return -1;

    }
}

基本上我是想从该指数位置返回账号,但我真的很难解决这个问题

编辑:我也不确定如何纠正这个以使其正常工作

/ **       应使用指定的帐号删除帐户       作为参数,如果帐户存在。       然后应通过a返回适当的布尔值      方法结果对话框。      * /

public boolean removeAccount(String accountNumber)
{
    int index = 0;
    for(Account account : accounts)
    {
        if((account.getAccountNumber() == accountNumber) && index < accounts.size())
            accounts.remove(account);
        else
            index++;
    }

}

7 个答案:

答案 0 :(得分:1)

是否覆盖了Account类中的equals方法。否则它将无法工作。 因为您将帐户与字符串进行比较 if (found)也足够if (found == true)

答案 1 :(得分:1)

您有两个主要问题:

  1. 您正在循环中使用循环,这对您来说完全是多余的
  2. 您正在将Account对象与String对象进行比较,这可能不是您想要的对象
  3. 以下是可能的解决方案:

    选项#1:

    for (Account account : accounts)
        if (account.getNumber().equals(accountNumber))
            return accounts.indexOf(account);
    return -1;
    

    选项#2:

    int size = accounts.size();
    for (int index=0; index<size; index++)
        if (accounts.get(index).getNumber().equals(accountNumber))
            return index;
    return -1;
    

    当然,您需要在课程public String getNumber()中实施方法Account

答案 2 :(得分:0)

public int search(String accountNumber){
   int index = 0;

   for (Account account : accounts ){
       if(account.getAccountNumber().equals(accountNumber))
          return index;
        else
           index++;
    }
   return -1;
}

现在尝试这个我没有java设置,但这应该工作。 注意:在您的帐户类中写一个返回帐号的getter。

************************************解决方案第二个问题****** ***********************

public boolean removeAccount(String accountNumber)
{
    for (Account account : accounts) {
        if(account.getAccountNumber().equals(accountNumber))
          return accounts.remove(account);
    }
    return false;
}

答案 3 :(得分:0)

您需要在Account类中使用getNum()方法。除非Account扩展String。 这应该正常工作并简化事情。

public int search(String accountNumber){
for(int i=0;i<accounts.size();i++){
 if(accounts.get(i).getNum().equals(accountNumber))
  return i;
}
return -1;
}

答案 4 :(得分:0)

试试这段代码:

public int search(String accountNumber){
   int index = 0;

   while(index < accounts.size()-1 && !Arrays.asList(accounts).contains(accountNumber)))
   {
       index++;
   }

    if  (accounts.get(index).equals (accountNumber))
        return index;
    else
        return -1;
    }
}

你不需要迭代所有的arraylist,如果你发现它返回它的索引。

然后尝试编辑while条件。

答案 5 :(得分:0)

您可以尝试使用此代码。我没有写任何新代码,只是提炼了你的代码。

public int search(String accountNumber){
   int index = 0;
   boolean found = false;

   for (Account account : accounts )
   {
        if(index < accounts.size() && !found)
            if (accounts.get(index).equals (accountNumber)) 
                {
                 found = true;
                 break;
                }


            else 
                index++;

 }   
 if (found == true)
        return index;
    else
        return -1;

}
}

答案 6 :(得分:0)

这应该可以试试..

public int search(String accountNumber)
{
 int index = -1;

 for(int i=0;i<accounts.size();i++)
 {
   if(accounts.get(i).getAccountNumber().equals(accountNumber))
    {
    index=i;
    break;
    }
 }
 return index;   
}

我初始化索引为-1你也可以使用0而setter getter应该在Account for accountNumber变量中写为accounts.get(i).getAccountNumber()