我正在创建一种方法,从该人的朋友列表中删除名为Mikel的人的第一个实例p,并从朋友列表中删除此人。当且仅当在此人的朋友列表中找到p时返回true。我运行我的代码,但它没有工作,我无法弄清楚问题。有人可以帮助我。
String name;
private ArrayList<Person> friend = new ArrayList<Person>();
public boolean deleteFriend(String Mike)
{
for (Person p : friend ) {
if (p.name.equals(Mike)) {
p.friend.remove(Mike);
break;
}
else{
return false;
}
}
return true;
}
答案 0 :(得分:0)
我以为我会写一些伪代码来说明你可能想做什么。鉴于你没有发布Person类,这几乎是我认为我能想到的。
public boolean delete(String username) {
// I don't know what you have implemented to go
// from username to Person to friends
List<Person> usersFriends = getFriends(username);
// iterating over Mikel's friends
for(Person usersFriend: usersFriends) {
// Mikel's friends friendList
List<Person> usersFriendsList = usersFriend.friends;
// Mikel's friend's friendlist
Iterator usersFriendsListIterator = usersFriendsList.iterator();
// if Mikel shows up, remove him
while(usersFriendsListIterator.hasNext()) {
if(usersFriendsListIterator.next().equals(**username**))
usersFriendsListIterator.remove();
}
}
}
答案 1 :(得分:0)
假设您有一个定义良好的Person
类,您可以使用迭代器安全地删除和检索删除状态:
//String s = "Mike"
// or whatever;
public boolean deleteFriend (String s){
Iterator<Person> it = friend.iterator();
Person p = null;
boolean found = false;
while(it.hasNext() && !found){
p = it.next();
if (p.getName().equals(s)) {it.remove(); found = true;}
}
return found;
}
如果您更喜欢较短的版本,可以使用Java8内部迭代器removeIf
:
public boolean deleteFriendJava8 (String s){
int initSize = friend.size();
friend.removeIf(p -> p.getName().equals(s));
return (initSize != friend.size());
}
getName()
(在两种情况下)都是返回Person
名称的方法。那个方法应该在Person
类中明确定义。
关于实例变量friend
,您应该这样声明:
private List<Person> friend = new ArrayList<>();
因为这样可以增加friend
抽象级别(你不会将friend
限制为ArrayList,这更具体)。