エリックが示すように、リストの長さは、アイテムがそこから削除されるように変化し、これだけ削除された要素の後の値のすべてのインデックスを行います。
私は「下」の意味が何であるかわかりません。私は、 "lower"を反復するループが "upper"から要素を削除しようとしていることに気付きました。これは意図的ですか?
これは「上」から削除する必要がポイントの「削除」リストに基づいて、私の解決策です。それぞれの==チェックをequals()チェックに置き換える以外は、元のテストのスタイルを使用することもできます。
Equals(...)実装がPointクラスから削除された場合、テストケースはオリジナルのa、b、c、d値のクローンを意図的に使用するため、 "upper"から削除されることはありません。
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
import org.junit.Test;
public class TestArrayList
{
@Test
public void testRemove()
{
// Test fixture:
Point a = new Point(115, 70);
Point b = new Point(139, 66);
Point c = new Point(195, 111);
Point d = new Point(144, 165);
List<Point> upper = new ArrayList<Point>();
upper.add(a.clone());
upper.add(b.clone());
upper.add(c.clone());
upper.add(d.clone());
List<Point> remove = new ArrayList<Point>();
remove.add(a.clone());
remove.add(b.clone());
remove.add(c.clone());
remove.add(d.clone());
// Assertions:
Assert.assertTrue(upper.size() == 4);
Assert.assertTrue(remove.size() == 4);
// Modified code:
System.out.println(upper.toString());
System.out.println(remove.toString());
for (Point p : remove)
{
upper.remove(p);
}
System.out.println(upper.toString());
System.out.println(remove.toString());
// Assertions:
Assert.assertTrue(upper.isEmpty());
Assert.assertTrue(remove.size() == 4);
}
}
class Point implements Cloneable
{
public int x;
public int y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
@Override
public Point clone()
{
return new Point(x, y);
}
@Override
public boolean equals(Object o)
{
if (this == o)
{
return true;
}
else if (o instanceof Point)
{
Point p = (Point) o;
return x == p.x && y == p.y;
}
else
{
return false;
}
}
@Override public String toString()
{
return "X: " + x + " Y: " + y;
}
}
あなたがしたいことを簡単に/より良い方法で行う必要があります –
私は自分の質問を編集しました。 – user472221
うわー。私はちょうど言うことができます。ブレース。具体的には、カールしたもの。本当に。あるいは、メンテナンスプログラマーがこのコードを見て移動することを積極的に望んでいますか? ;-) –