-3

私の簡単な例 (コンパイルされた作業コード) は、果物を重量で並べ替えません。

import java.util.Arrays;

public class Test {

    public static class Fruit implements Comparable<Fruit> {
        public int weight = 0;
        public Fruit(int w) { weight = w; }
        // compare this fruit to a given fruit f
        public int compareTo(Fruit f) {
            return (weight > f.weight) ? 1 : 0;
        }
    }

    public static void main(String[] args) {

        // get some fruits (we intentionally create a box for 100 fruits)
        Fruit[] fruits = new Fruit[100];
        for (int i = 0; i < 10; i++) {
            fruits[i] = new Fruit((int)(Math.random() * 50 + 1));
        }

        // sort fruits by weight
        Arrays.sort(fruits, 0, 10);

        // print fruit weights
        for (int i = 0; i < 10; i++) {
            System.out.print(fruits[i].weight + " ");
        }

    }

}

なぜそうなのですか?

わかりました、私の問題 (果物についてではありません) では、ペアごとに等しくないオブジェクトがあります。そのため、あるオブジェクトが別のオブジェクトよりも大きいか小さいと考えました。では、0 (オブジェクトが等しい) が決して起こらないことがわかっている場合、この状況をどのように処理できますか?

4

5 に答える 5

7

compareTo次の 3 つの値のいずれかを返す必要があります。

  • >0--> より大きい

  • 0--> 等しい

  • <0--> 未満

メソッドはorcompareToのみを返します。それを修正します。01

于 2013-05-27T15:41:19.260 に答える
2

最善の方法は、JDK が提供する方法を使用してint値を比較することです。これにより、コードが何を行っているかが明確になります。

public int compareTo(Fruit f) {
    return Integer.compare(weight, f.weight);
}

バージョン 7 より前の Java では、次の 2 つの選択肢があります。

public int compareTo(Fruit f) {
    return weight - f.weight; // terse, but slightly obtuse
}

public int compareTo(Fruit f) {
    return new Integer(weight).compareTo(f.weight); // ugly, but supposedly clear
}

私の好みは引き算です。一度理解すれば、それ以降は明らかだからです。

于 2013-05-27T15:47:58.767 に答える
0

メソッドcompareToは -1, 0, 1 を返す必要があります

LESSER = -1;
EQUAL = 0;
BIGGER = 1;
于 2013-05-27T15:41:08.983 に答える