是否有干净的语法来检查多个变量是否都具有相同的值?

Pie*_*ert 22 java

我们有n个变量,X = {x1,x2,...xn}它们不属于任何结构.

以python为例,我可以这样做: if (x1 == x2 == x3 == xn):

在java中我必须这样做: if((x1 == x2) && (x2 == x3) && (x3 == xn)):

您是否知道改进此语法的简单方法?(想象一下很长的变量名称和很多)

谢谢.

Jon*_*eet 29

如果你有很多这些变量,你是否考虑将它们放在一个集合中而不是将它们作为单独的变量?那时有各种选择.

如果你发现自己做了很多,你可能想要编写辅助方法,可能使用varargs语法.例如:

public static boolean areAllEqual(int... values)
{
    if (values.length == 0)
    {
        return true; // Alternative below
    }
    int checkValue = values[0];
    for (int i = 1; i < values.length; i++)
    {
        if (values[i] != checkValue)
        {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

由glowcoder提供的替代方案是强制存在至少一个值:

public static boolean areAllEqual(int checkValue, int... otherValues)
{
    for (int value : otherValues)
    {
        if (value != checkValue)
        {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,使用:

if (HelperClass.areAllEqual(x1, x2, x3, x4, x5))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)


cor*_*iKa 13

您可以创建一个这样的实用工具方法:

public boolean allEqual(Object... objs) {
    if(objs.length < 2) return true; // 0 or 1 objects are all equal
    Object key = objs[0]; // pick one
    for(Object o : objs) if(!o.equals(key)) return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是

public boolean allEqual(Object key, Object... objs) {
    for(Object o : objs) if(!o.equals(key)) return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

简化许多样板逻辑.然后就去吧

if(allEqual(x,x1,x2,x3))
Run Code Online (Sandbox Code Playgroud)

显然这两者是相互排斥的(它们具有特征性的暧昧),但你可以拥有 allEqualallEqualWithKey

  • @glowcoder:我也考虑过这个形式......但拳击所有的值可能最终会有点痛苦.我认为为了一些重载,我会分别处理每种原始类型. (2认同)

Pet*_*rey 7

与@ Jon的解决方案类似,但更短.

public static boolean areAllTheSame(int value, int... values) {
    for (int i: values) if(value != i) return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

  • 缩短原因的一半原因是将大量内容放在一行而不使用大括号 - 我在生产代码中从未做过.我已经在"强制至少一个参数"版本中编辑了我的代码,尽管最初由glowcoder显示. (2认同)

Jes*_*per 5

您可以编写一个方法,使这看起来不那么麻烦:

boolean areAllEqual(Object... values) {
    if (values.length < 2) {
        return true;
    }

    for (int i = 1; i < values.length; i++) {
        if (!values[i].equals(values[0])) {
            return false;
        }
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

if (areAllEqual(x1, x2, x3, x4, x5)) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

编辑太慢了...!:-(