0

arrayListを2つの異なる方法で並べ替えようとしています。1つはarrayList内のオブジェクトの領域で、2つはarrayList内のオブジェクトの名前(shape1、shape2)で並べ替えます。オブジェクトをファイルに印刷すると、オブジェクトは次のようになります。shape1 :(ポイント、半径など)area = 0.0で、シェイプは続行されます。類似しているが、Collections.sortを使用してすべて回答された他の質問を見てみました。この方法を使用することになっているのかわかりません。これが私があなたにアイデアを与えるために使っているいくつかのコードです:

for (int i =0; i <shapes.size();i++){
    for (int j = 1; j<shapes.size(); j++){
        if (shapes.get(i).getShape().area() > shapes.get(j).getShape().area())
        {
            //
        }
        else
        {
            //
        }
    }
}

これをどうやってやればいいのかわからない。ポインタはありますか?名前による並べ替えには、次のものを使用する必要があります。

shapes.get(i).getName()
4

4 に答える 4

3

解決策1

オブジェクトは、 Comparableインターフェースを実装し、Collections.sort(List list)を使用してソートできます。

public class Shape implements Comparable<Shape> {
    @Override
    public int compareTo(Shape o) {
        if(o == null) {
            return 1;
        }
        if(getName() == null || o.getName() == null) {
            return 0;
        } else if(getName() != null && o.getName() == null) {
            return 1;
        } else if(getName() == null && o.getName() != null) {
            return -1;
        }
        return getName().compareTo(o.getName());
    }
}

Collections.sort(shapes);

解決策2

Comparatorを実装するクラスを作成し、Collections.sort(List list、Comparator c)を使用します

public class ShapeComparator implements Comparator<Shape> {
    @Override
    public int compare(Shape s1, Shape s2) {
        if(s1 == null || s2 == null) {
            return 0;
        } else {
            return s1.getName().compareTo(s2.getName());
        }
    }
}

Collections.sort(shapes, new ShapeComparator());
于 2012-04-24T03:50:49.423 に答える
1

ComparatorクラスとCollections.sort(List<T>, Comparator<? super T>メソッドを見てください。

于 2012-04-24T03:40:44.397 に答える
1

これは宿題なので、コードは投稿しません。

の使用が許可されていない場合は、選択ソートArrays.sortを実装できます。これは非常に単純で、コードの先頭に既に記述されています。アイデアは、外側のループの各反復で、セグメント内の最小の要素を選択し、内側のループを使用して、その要素を配列の-番目の位置に配置することです。内側のループは次のようになります。iishapes.size()ji

for(int j = i+1 ; j<shapes.size(); j++)
//          ^--- this is what's changed

ここで、条件に基づいて、-th要素を-thとif交換するか、そのままにして次に進みます。ji

文字列を並べ替えるには、条件compareToでメソッドを使用しますif

于 2012-04-24T03:43:49.390 に答える
0

私はあなたがこのようなものを使うべきだと思います:

        Collections.sort(shapes, new Comparator<Object>() {
            public int compare(Object obj1, Object obj2) {
                Shape shape1 = ((Shape) obj1).getShape();
                Shape shape2 = ((Shape) obj2).getShape();

                String name1 = ((Shape) obj1).getName();
                String name2 = ((Shape) obj1).getName();

                Double area1 = shape1.area();
                Double area2 = shape2.area();

                int areaCmp = area1 - area2;
                if( areaCmp!= 0 ) {
                    return areaCmp;
                }

                return name1.compareTo(name2);
            }
        });

詳細については

于 2012-04-24T03:59:15.183 に答える