Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在帐户的arraylist中搜索帐户编号指定为参数的帐户_Java_Arraylist - Fatal编程技术网

Java 如何在帐户的arraylist中搜索帐户编号指定为参数的帐户

Java 如何在帐户的arraylist中搜索帐户编号指定为参数的帐户,java,arraylist,Java,Arraylist,我的代码可以编译,但不管输入的内容是否正确,它都返回-1 public int search(String accountNumber){ int index = 0; boolean found = false; for (Account account : accounts ) while(index < accounts.size() && !found) if (ac

我的代码可以编译,但不管输入的内容是否正确,它都返回-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;

    }
}
public int搜索(字符串accountNumber){
int指数=0;
布尔值=false;
用于(账户:账户)
while(索引
基本上,我试图从索引位置返回帐号,但我真的很难解决这个问题

编辑:我也不知道如何纠正这一点,以使其工作

/** 应删除指定帐号的帐户 作为参数,如果该帐户存在。 然后,应通过 方法结果对话框。 */

公共布尔removeAccount(字符串accountNumber)
{
int指数=0;
用于(账户:账户)
{
if((account.getAccountNumber()=accountNumber)&&index
您是否重写Account类中的
equals
方法。否则它将无法工作。 因为您将帐户与字符串进行比较。 而且
if(found)
就足够了,而不是
if(found==true)

现在试试这个,我没有java设置,但是应该可以。 注意:在Account类中编写一个getter,返回帐号

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

public boolean removeAccount(String accountNumber)
{
    for (Account account : accounts) {
        if(account.getAccountNumber().equals(accountNumber))
          return accounts.remove(account);
    }
    return false;
}
在Account类中需要一个getNum()方法。除非帐户扩展字符串。 这应该可以正常工作并简化事情

public int search(String accountNumber){
for(int i=0;i<accounts.size();i++){
 if(accounts.get(i).getNum().equals(accountNumber))
  return i;
}
return -1;
}
public int搜索(字符串accountNumber){
对于(int i=0;i只需尝试以下代码:

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;
    }
}
public int搜索(字符串accountNumber){
int指数=0;
而(索引
不需要遍历所有arraylist,如果找到它,则返回其索引


那么,请尝试编辑while条件。

您可以尝试此代码。我没有写任何新的代码,只是改进了你的代码

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;

}
}
public int搜索(字符串accountNumber){
int指数=0;
布尔值=false;
用于(账户:账户)
{
如果(索引
您有两个主要问题:

  • 您正在循环中使用一个循环,这对于您的目的来说是完全冗余的
  • 您正在将
    帐户
    对象与
    字符串
    对象进行比较,这可能不是您想要的
  • 以下是可能的解决方案:

    选项1:

    选项2:

    int size=accounts.size();
    
    对于(int index=0;index这应该可以用,试试这个.)

    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;   
    }
    
    public int搜索(字符串accountNumber)
    {
    int指数=-1;
    
    对于(int i=0;我为什么不干脆
    返回索引
    而不是设置
    found=true
    ?顺便说一句,这两个循环一个在另一个内部是完全冗余的。你只需要一个循环!!!为了返回索引,
    while
    循环会更容易选择。@dana问题在于你的if语句在w下hile循环。最简单的答案是不要为每个循环使用一个for,而是使用一个normal for循环。如果找到它,那么只返回i;在for循环之后,只返回-1;这里有一些根本错误。
    accounts.get(…)
    返回一个
    Account
    对象,而
    accountNumber
    类型为
    String
    。您是否介意解释一下您到底想比较什么?@Dana删除每个循环中的项不是一个好主意。为此,您应该使用迭代器。[如果找不到搜索到的帐户,此代码将抛出
    索引AutofBoundsException
    。是的,这是
    帐户的问题。size()
    。不确定如何实现迭代器?尚未在中完成classes@Dana请参阅removei解决方案的第二部分,我得到了不兼容的类型-void不能转换为布尔值
    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;
    
    }
    }
    
    for (Account account : accounts)
        if (account.getNumber().equals(accountNumber))
            return accounts.indexOf(account);
    return -1;
    
    int size = accounts.size();
    for (int index=0; index<size; index++)
        if (accounts.get(index).getNumber().equals(accountNumber))
            return index;
    return -1;
    
    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;   
    }