2011-12-03 17 views
0

私はウサギのArraylistを持っています。 各ウサギはStringの名前とString[]の情報を持っています。ArrayListからアイテムを削除するJavaアクセサーの必要があります

rabbit(String name, String[] informations) 

私はArrayListでこれらのウサギを持っている、のはrabbitlistそれを呼びましょう。私は私が名前を取得するために各ループのための推測やwhileループのいくつかの種類を確認する必要があり

public void removerabbit(String name) 

は、私は方法のようにしたいです。 私は、ウサギの名前を示すアクセサーのgetName()を作成しました。 ちょうど私の脳を包み込む方法を見つけるために問題を抱えています。シンプルでなければならない。あなたはjava.util.Iteratorのは、リスト上の反復中にアイテムを削除できるようにする必要があり

+0

私はあなたに 'Rabbit'のコードを含めることをお勧めします – Kowser

答えて

1

あなたRabbitの名前がRabbitの一意の識別子であり、あなたはRabbitequalsメソッドをオーバーライドすることができます名前を確認するだけです。その場合、ArrayListの組み込み削除メソッドは、equalsメソッドを使用して削除する要素を決定するので、removeRabbitメソッドは非常に簡単になります。

public void removeRabbit(String rabbitName){ 
    //just create a new Rabbit with rabbitName as name, 
    //and remove it from the list 
    rabbitList.remove(new Rabbit(rabbitName)); 
} 

場合によっては、リストを反復処理することができます。次のコードは、指定された名前のすべてのRabbitを削除します。最初のものだけを取り除きたい場合は、最初のウサギを取り除いたらループを止めてください。

public void removeRabbit(String name){ 
    Iterator<Rabbit> rabbitIterator = rabbitList.iterator(); 
    while (rabbitIterator.hasNext()) { 
    Rabbit next = rabbitIterator.next(); 
    if (name.equals(next.getName())){ 
     rabbitIterator.remove(); 
    } 
    } 
} 
+0

Iteratorについて説明できますか? whileループとif文を知っています。 – Swupper

+0

http://en.wikipedia.org/wiki/Iteratorイテレータのコンセプトについてよくわかります – Robin

+0

@Swupper - Oracle JavaチュートリアルやJavaの優れた教科書を読む時間が必要です。 –

0

Iterator<Rabbit> it = rabbits.iterator(); 
String nameForRemove = "rabbitName"; 
while(it.hasNext()) { 
    if(it.next().getName().equals(nameForRemove)) it.remove(); 
} 
0

あなたはrabbitListに与えられたname.Getそのインデックスでウサギを見つけることrabbitListスルー反復する必要があり、そしてあなたのコードのようなものでなければなりませんrabbitList から削除されます、

public boolean removeRabbit(String name){ 
Rabbit rabbit; 
Iterator it = rabbitList.iterator(); 
while (it.hasNext()) { 
    rabbit=it.next(); 
    if(name.equals(rabbit.getName()){  
     int index =rabbitList.indexOf(rabbit); 
     //remove rabbit at this index,returns boolean 
     return rabbitList.remove(index); 
     } 
    } 
return false; 
} 

これは動作しますいくつかの変更をすることがあります...

EDIT:

public boolean removeRabbit(String name){ 
Rabbit rabbit; 
int index; 
Iterator it = rabbitList.iterator(); 
while (it.hasNext()) { 
    rabbit=it.next(); 
    if(name.equals(rabbit.getName()){  
     index =rabbitList.indexOf(rabbit); 
     } 
    } 
//remove rabbit at this index,returns boolean 
return rabbitList.remove(index); 
} 

これはいくつかの変更で動作する可能性があります...

+0

反復処理中は、リストから要素を削除しないでください。イテレータからそれを削除してください。 – Robin

+0

@Robin:なぜ反復処理中は削除できませんか? –

+0

http://docs.oracle.com/javase/6/docs/api/java/util/Iterator.html#remove()を参照してください。 – Robin

関連する問題