JavaでArrayListをソートするメソッドを記述する必要があります。私は犬の首輪のArrayListを無効にしたDogクラスを持っています。私はこのリストをアルファベット順に襟の色の名前で並べ替える方法を書いています。インタフェースのcompareTo()メソッドを使用してオブジェクトのArrayListをソートするComparable
public class Dog {
private String name;
private int age;
private List<Collar> list;
public Dog(String name, int age){
this.name = name;
this.age = age;
this.list = new ArrayList<Collar>();
}
は、Dogクラスで私は方法書かれている:
public List<Collar> sortList(){
List<Collar> list2 = new ArrayList<Collar>();
list2.addAll(this.list);
Collections.sort(list2);
return list2;
}
を、私はComparableインタフェースを使用しました:
public class Collar implements Comparable<Collar>{
private String color;
private int dimension;
/*Constructor,getters and setters*/
@Override
public int compareTo(Collare o) {
return this.color.compareTo(o.color);
}
問題はすべて、このコードは」doesnのことですなぜ私はテストを書く場合は、実際にはわからない:
@Test
public void test_SortList() {
Dog dog = new Dog("Bobby",1);
List<Collar> list = new ArrayList<Collar>();
Collar c3 = new Collar("Azure",2);
Collar c2 = new Collar("Blue",5);
Collar c1 = new Collar("Cyan",1);
list.add(c1);
list.add(c3);
list.add(c2);
dog.sortList();
assertEquals("Azure",list.get(0).getColor());
assertEquals("Blue",list.get(1).getColor());
assertEquals("Cyan",list.get(2).getColor());
}
失敗します。誰でも私を助けて、私のミスはどこにあるのか教えてくれますか?ありがとうございました。
@Test
public void test_SortList() {
Dog dog = new Dog("Bobby",1);
List<Collar> list = new ArrayList<Collar>();
Collar c3 = new Collar("Azure",2);
Collar c2 = new Collar("Blue",5);
Collar c1 = new Collar("Cyan",1);
list.add(c1);
list.add(c3);
list.add(c2);
list = dog.sortList();
assertEquals("Azure",list.get(0).getColor());
assertEquals("Blue",list.get(1).getColor());
assertEquals("Cyan",list.get(2).getColor());
}
をそれはまだ失敗:
私はこれを行うことを試みました。それは私にindexOutOfBoundsExceptionを与えます。
なぜ私がしなければ:
list.add(c1);
list.add(c3);
list.add(c2);
list = dog.sortList();
assertEquals(3,list.size());
それが失敗し、それはサイズが0であることを述べていますか?
私はそれが0である理由を知りました。なぜなら私はそうするからです。list = dog.sortList()
私はもはや古いリストにリンクしていません。 だから私はこの試みた:
@Test
public void test_SortList() {
Dog dog = new Dog("Bobby",1);
List<Collar> list = new ArrayList<Collar>();
Collar c3 = new Collar("Azure",2);
Collar c2 = new Collar("Blue",5);
Collar c1 = new Collar("Cyan",1);
list.add(c1);
list.add(c3);
list.add(c2);
List<Collar>list2 = dog.sortList();
list2.addAll(list);
assertEquals("Azure",list2.get(0).getColor());
assertEquals("Blue",list2.get(1).getColor());
assertEquals("Cyan",list2.get(2).getColor());
}
を、それはまだ動作しません。
私はそれを解決しました。私、誰かがそれを必要とする場合には、私の解決策を投稿:
私は、メソッドのパラメータでリストを渡した:
public List<Collar> sortList(List<Collar> list2){
list2.addAll(this.list);
Collections.sort(list2);
return list2;
}
を、私はこれをしなかったテストで:
@Test
public void test_SortList() {
Dog dog = new Dog("Bobby",1);
List<Collar> list = new ArrayList<Collar>();
Collar c3 = new Collar("Azure",2);
Collar c2 = new Collar("Blue",5);
Collar c1 = new Collar("Cyan",1);
list.add(c1);
list.add(c3);
list.add(c2);
dog.sortList(list);
assertEquals("Azure",list.get(0).getColor());
assertEquals("Blue",list.get(1).getColor());
assertEquals("Cyan",list.get(2).getColor());
}
またはおそらく私犬のクラスのリストに襟を追加しただけかもしれません。
"あなたは犬のインスタンスに提供した元のリストのインスタンスをソートしていません"。実際には、OPはリストインスタンスをまったく提供しませんでした。 – Thilo
良い点@Thilo私は彼がリストを設定するセッターメソッドを持つチャンクにコードを貼り付けた方法を想定していました。 – SMA