我即将创建两种创建和更改客户档案的方法。创建配置文件没问题。一切似乎都很顺利。但是,当我进入并更改配置文件时,我认为它不起作用。
indexOf()给出-1,即使我搜索的值为:S
任何人都有一个很好的解决方案吗?
问题在于editProfile方法!
public class Profile{
String name;
long id;
int accNr = 1000;
double balance;
}
ArrayList<Profile> profileList = new ArrayList<Profile>();
public boolean newProfile(long id, String name, int amount){
Profile newProfile = new Profile();
Profile accNr = new Profile();
int ACC = accNr.accNr++;
newProfile.accNr = ACC;
newProfile.id = id;
newProfile.name = name;
newProfile.balance = amount;
profileList.add(newProfile);
return true;
}
public void editProfile(long id, String newName){
int ID = (int)id;
System.out.print(ID);
int index = profileList.indexOf(id);
System.out.print(index);
profileList.get(index);
}
答案 0 :(得分:1)
indexOf
方法将使用equals
方法确定列表中是否存在Profile
。您必须覆盖Profile
中的equals
method才能返回正确的结果。
其次,它找不到您的Profile
,因为您将long
传递给indexOf
,而long
和Long
都不会在列表中找到。如果您必须通过Profile
检索long
,那么拥有Map<Long, Profile>
代替ArrayList<Profile>
会更有意义。然后,您可以致电get(id)
来检索Profile
。通常,如果您覆盖equals
,则应覆盖hashCode
method,但由于此处未将Profile
用作关键字,因此不需要。
答案 1 :(得分:0)
profileList
包含Profile
个实例,您正在尝试获取long
的索引。
equals
类中的Profile
方法。
@Override
public boolean equals(Object obj) {
...
}
profileList
的元素并手动检查匹配项,例如:
for (Profile element : profileList)
if (element.getID() == id)
...
答案 2 :(得分:0)
可能你的Profile
需要覆盖equals和hashCode方法。 Eclipse可以生成然后,就像举个例子:
public class Profile {
String name;
long id;
int accNr = 1000;
double balance;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + accNr;
long temp;
temp = Double.doubleToLongBits(balance);
result = prime * result + (int) (temp ^ (temp >>> 32));
result = prime * result + (int) (id ^ (id >>> 32));
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Profile other = (Profile) obj;
if (accNr != other.accNr)
return false;
if (Double.doubleToLongBits(balance) != Double
.doubleToLongBits(other.balance))
return false;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}