0

Pythonでは、次のことができます

if(a!=b!=c)

それらを分離してすべての「&&」演算子を記述することなく、Java で同じことを行うにはどうすればよいでしょうか? 10 個の要素すべてが等しくないことを確認しようとしていますが、等価ステートメントを 45 回書く必要はありません。

4

5 に答える 5

4

Java でその操作を行うことはできません。さらにab、 などがプリミティブでない場合は、おそらく(または)equalsの代わりに使用する必要があることに注意してください。後者は、値の等価性ではなく、オブジェクトの同一性のみをチェックします。==!=

10 個の要素がすべて異なるかどうかを確認したい場合は、それらをSet実装 ( などHashSet) に投入して、セットに 10 個の要素が含まれていることを確認できます。または、(@allonhadaya のコメントに感謝します) 各要素が追加されたことを確認してください。以下は、任意の型の任意の数のオブジェクトに対して機能する一般的なメソッドです。

public static <T> boolean areDistinct(T... elements) {
    Set<T> set = new HashSet<T>();
    for (T element : elements) {
        if (!set.add(element)) {
            return false;
        }
    }
    return true;
}

要素がプリミティブ (例: int) の場合、特定の型に対して非ジェネリック バージョンを作成できます。

于 2013-05-13T04:34:09.040 に答える
1

45 個の変数を比較する必要がある場合、プログラムに何か問題があります。配列とサイクルを使用してみてください。

于 2013-05-13T04:33:56.860 に答える
0

おそらく最も効率的なソリューションであることに同意しSetますが、比較に何らかのカスタマイズを提供する必要がある場合は、次のようなものを使用できます...

Comparable[] values = new Comparable[]{1, 2, 3, 4, 5};
boolean matches = true;
for (int outter = 0; outter < values.length; outter++) {
    for (int inner = outter + 1; inner < values.length; inner++) {
        matches &= values[outter].compareTo(values[inner]) == 0;
    }
}
System.out.println(matches);
于 2013-05-13T04:32:40.880 に答える
0

Java にはそのようなオプションはありません (&& を使用せずにそのようなことを行うことはできません)。Java は Python ではありません

于 2013-05-13T04:32:41.097 に答える
0

正直なところ、Java でこれを行うためのネイティブな方法はありません。

allしかし、代わりに Python のメソッドのシンタックス シュガーを実装してみませんか? varargs を使えば、難しくありません。ただし、O(n) ランタイム コストがあります。

public static boolean all(Boolean... theBools) {
    Boolean result = Boolean.TRUE;
    for(Boolean b : theBools) {
        if(null == b || !b) {
            result = Boolean.FALSE;
            break;
        }
    }
    return result;
}

次のように使用できます。

if(YourClass.all(a, b, c, d, e, f, g, h, i, j)) {
    // something to do if ALL of them are true
}
于 2013-05-13T04:41:50.537 に答える