0

チームのArrayListを持つクラスがあり、名前が「FREE」のチームを削除したい。

だから私は試しました:

 public void removeFree()
{

    for (int i = 0 ; i < numberOfTeams ; i++ )
    {
        if (this.getListOfTeams().get(i).getName() == "FREE")
        {
            this.getListOfTeams().remove(i);
        }
        else
        {}
    }
}

それは私のアプリをクラッシュさせます。

4

3 に答える 3

3

equals()メソッドを使用して、2つの文字列が意味のある等しいかどうかを確認します。==演算子は、2つの参照変数が同じオブジェクトを参照しているかどうかをチェックするだけです。

    if (this.getListOfTeams().get(i).getName() == "FREE")

する必要があります

    if (this.getListOfTeams().get(i).getName().equals("FREE"))

さらに追加するには、equals()を使用してもConcurrentModificationException、反復中にarrayListから要素を削除するときに取得します。イテレータを使用して、イテレータから要素を削除する必要があります。

Iterator<Team> itr = getListOfTeams.iterator();
while(itr.hasNext()){
  if (itr.next().getName().equals("FREE"))
        {
            itr.remove();
        }
        else
        {}
}
}
于 2013-02-11T10:54:09.990 に答える
2

反復中に要素を削除するには、次のメソッドと一緒Listに使用する方が安全です。Iteratorremove

for (Iterator it = getListOfTeams().iterator;it.hasNext();) {
    String name = it.next();
    if ("FREE".equals(name) {
        it.remove();
    }
    else{}
}

Javaでの文字列値の比較は、通常、このメソッドを使用して行う必要があることに注意してくださいString.equals()==は参照等式演算子です。Javaで文字列を比較するにはどうすればよいですか?を参照してください。

于 2013-02-11T10:57:47.710 に答える
0

同じArrayListをループしているときに、アイテムを削除しようとしています。最初に複製し、複製されたリストを繰り返してから、最初のポインターの項目を削除する必要があります。

だからこれを考慮してください:

List<Object> arrayToIterate = getListOfTeams().clone();
for (int i = 0 ; i < numberOfTeams ; i++ )
{
    if (tarrayToIterate.get(i).getName().equals("FREE"))
    {
        this.getListOfTeams().remove(i);
    }
    else
    {}
}

また、equalsではなく==で文字列を比較しています。

于 2013-02-11T10:56:35.813 に答える