Java 如何在帐户的arraylist中搜索帐户编号指定为参数的帐户
我的代码可以编译,但不管输入的内容是否正确,它都返回-1Java 如何在帐户的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
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;
}