2016-04-12 7 views
-2

私はこのPersonの友だちリストからMikelという名前のPersonの最初のインスタンスpを削除するメソッドを作成し、pのFriendリストからこのPersonを削除します。このPersonのフレンドリストで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; 
} 
+2

ようこそスタックオーバーフロー。残念なことに「それはうまくいかない」と私たちは、あなたが何を期待していたかについてあなたに何かを教えてくれません。質問を明確にしてください。書式設定のヘルプを読んで、次にコードが適切にフォーマットされていることを確認してください。 –

+0

"Person"の定義はコードからは分かりませんので、参照する必要があります。 – stdunbar

+0

これはグラフの問題のように大変です。私がお勧めするものは次のとおりです。まず、リストからMikelを削除しながらMikelの友人を解析します。一度、Mikelの友人の誰も彼がもう存在しないことを知っていない、Mikelのエントリを削除します。 –

答えて

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(); 
     } 
    } 
} 
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内部イテレータを使用することができますremoveIfgetName()は(両方の場合において)を返すメソッドである

public boolean deleteFriendJava8 (String s){ 
    int initSize = friend.size(); 

    friend.removeIf(p -> p.getName().equals(s)); 

    return (initSize != friend.size()); 
} 

10の名前。そのメソッドは、明らかにPersonクラスで定義する必要があります。この方法は、あなたがfriend抽象レベル(あなたはより具体的であるのArrayListにfriendを制限していない)を高めるため

private List<Person> friend = new ArrayList<>(); 

:インスタンスについて

変数friend、あなたはこのようにそれを宣言する必要があります。

関連する問題