3

次のコードがあります: TreeSet に Item オブジェクトを挿入しようとしていますが、欲求の出力が得られません。

public class Main
{
    public static void main(String a[])
    {
        Item i1=new Item(1,"aa");
        Item i2=new Item(5,"bb");
        Item i3=new Item(10,"dd");
        Item i4=new Item(41,"xx");
        Item i5=new Item(3,"x5");
        TreeSet t=new TreeSet();    
        t.add(i1);
        t.add(i2);
        t.add(i3);
        t.add(i4);
        t.add(i5);
        System.out.println(t);      
    }
}
class Item implements Comparable<Item>
{
    String  nm;
    int price;
    public Item(int n,String nm)
    {
        this.nm=nm;
        price=n;
    }
    public int compareTo(Item i1)
    {
        if(price==i1.price)
            return 0;
        else if(price>=i1.price)
            return 1;
        else
            return 0;
    }
    public String  toString()
    {
        return "\nPrice "+price+" Name : "+nm;
    }    
}

出力:

[ 価格 1 名前 : aa、
価格 5 名前 : bb、
価格 10 名前 : dd、
価格 41 名前 : xx ]

Item i5=new Item(3,"x5");が挿入されないのはなぜですか?
TreeSet に挿入できる理由。

4

5 に答える 5

3

compareTo()あなたは正しく実装していません。以下は javadoc からの抜粋です。

Compares this object with the specified object for order. Returns a negative integer,
zero, or a positive integer as this object is less than, equal to, or greater than
the specified object.

-1現在のオブジェクトの価格が比較対象のオブジェクトの価格よりも低い場合、実装は返されません。

于 2012-11-18T07:12:08.770 に答える
2

あなたのcompareTo方法では、else return -1;!

于 2012-11-18T07:12:24.173 に答える
2

置き換えcompareToて:

else
        return 0;

と:

else
        return -1;
于 2012-11-18T07:12:32.510 に答える
2

実装するクラスComparableは、契約に準拠する必要があります: if a.compareTo(b) < 0then b.compareTo(a) > 0. あなたのものは準拠していません。

于 2012-11-18T07:12:55.903 に答える
0

主な問題は、compareTo メソッドにあります。間違ったロジックを実装しました。私はあなたのクラスを変更し、日食でテストして、必要な出力を提供しました。以下のコードを見てください。

import java.util.TreeSet;
public class Main
{
    public static void main(String a[])
    {
        Item i1=new Item(1,"aa");
        Item i2=new Item(5,"bb");
        Item i3=new Item(10,"dd");
        Item i4=new Item(41,"xx");
        Item i5=new Item(3,"x5");
        TreeSet<Item> t=new TreeSet<Item>();    
        t.add(i1);
        t.add(i2);
        t.add(i3);
        t.add(i4);
        t.add(i5);
        System.out.println(t);      
    }
}
class Item implements Comparable<Item>
{
    String  nm;
    int price;
    public Item(int n,String nm)
    {
        this.nm=nm;
        price=n;
    }
    public int compareTo(Item i1)
    {
        // Objects equal so no need to add 
        if(price==i1.price)
        {
            return 0;
        }
        // Object are greater
        else if(price>i1.price)
        {

            return 1;
        }
        // Object is lower
        else
        {
            return -1;
        }
    }
    public String  toString()
    {
        return "\nPrice "+price+" Name : "+nm;
    }    
}
于 2012-12-28T05:03:01.550 に答える