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 中没有本地方法可以做到这一点。

但是,我们为什么不为 Python 的all方法实现语法糖呢?使用可变参数,这并不难。不过,它确实有 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 回答