if条件检查在JAVA中的任何一点上是否只有一个变量由四个变量组成
如果设置了四个变量中的一个以上,我想显示一个错误。。。 在Java中..这就是我想到的if条件检查在JAVA中的任何一点上是否只有一个变量由四个变量组成,java,logic,logical-operators,Java,Logic,Logical Operators,如果设置了四个变量中的一个以上,我想显示一个错误。。。 在Java中..这就是我想到的 if( (isAset() && isBset()) || (isBset() && isCset()) || (isCset() && isDset()) || (isDset() && isAset()) ) attri.greedySelectionException(..); 我想看看是否有更好的方法来做这件事。你用一个计数
if( (isAset() && isBset()) || (isBset() && isCset()) || (isCset() && isDset()) || (isDset() && isAset()) )
attri.greedySelectionException(..);
我想看看是否有更好的方法来做这件事。你用一个计数器,然后把它和1比较一下怎么样 类似于
int i = 0;
if (isAset()) i++;
if (isBset()) i++;
if (isCset()) i++;
if (isDset()) i++;
if (i > 1)
...
或者,如果要检查某个对象的属性,可以使用一些反射来迭代相关属性,而不是每个属性都有一个if语句
编辑:查看下面MariusŽilėnas的varargs static方法,以获得更整洁的代码,即使用(将旧学派的for each改为a,将三元表达式改为if):
而不是几个if语句。使用计数器,然后将其与1进行比较怎么样 类似于
int i = 0;
if (isAset()) i++;
if (isBset()) i++;
if (isCset()) i++;
if (isDset()) i++;
if (i > 1)
...
或者,如果要检查某个对象的属性,可以使用一些反射来迭代相关属性,而不是每个属性都有一个if语句
编辑:查看下面MariusŽilėnas的varargs static方法,以获得更整洁的代码,即使用(将旧学派的for each改为a,将三元表达式改为if):
而不是几个if语句。您可以使用以下方法简化此表达式:
if((isAset() || isCset()) && (isBset() || isDset()))
attri.greedySelectionException(..);
Wolfram alpha为您完成了这项工作:
您可以使用真值表进行验证:
您可以使用以下方法简化此表达式:
if((isAset() || isCset()) && (isBset() || isDset()))
attri.greedySelectionException(..);
Wolfram alpha为您完成了这项工作:
您可以使用真值表进行验证:
我建议使用(参见Java教程)并生成一个函数,计算给定的True数。下面的代码对此进行了演示:
public class Values
{
public static boolean isASet()
{
return false;
}
public static boolean isBSet()
{
return true;
}
public static boolean isCSet()
{
return true;
}
public static boolean isDSet()
{
return true;
}
public static int booleans(boolean... booleans)
{
int sum = 0;
for (int i = 0; i < booleans.length; i++)
{
sum += booleans[i] ? 1 : 0;
}
return sum;
}
public static void main(String[] args)
{
System.out.println(
booleans(isASet(), isBSet(), isCSet(), isDSet()));
if (1 < booleans(isASet(), isBSet(), isCSet(), isDSet()))
{
System.out.println("Condition met.");
}
}
}
公共类值
{
公共静态布尔isASet()
{
返回false;
}
公共静态布尔值isBSet()
{
返回true;
}
公共静态布尔值isCSet()
{
返回true;
}
公共静态布尔isDSet()
{
返回true;
}
公共静态整数布尔值(布尔值…布尔值)
{
整数和=0;
for(int i=0;i
我建议使用(参见Java教程)并生成一个函数来计算给定的trues数。下面的代码对此进行了演示:
public class Values
{
public static boolean isASet()
{
return false;
}
public static boolean isBSet()
{
return true;
}
public static boolean isCSet()
{
return true;
}
public static boolean isDSet()
{
return true;
}
public static int booleans(boolean... booleans)
{
int sum = 0;
for (int i = 0; i < booleans.length; i++)
{
sum += booleans[i] ? 1 : 0;
}
return sum;
}
public static void main(String[] args)
{
System.out.println(
booleans(isASet(), isBSet(), isCSet(), isDSet()));
if (1 < booleans(isASet(), isBSet(), isCSet(), isDSet()))
{
System.out.println("Condition met.");
}
}
}
公共类值
{
公共静态布尔isASet()
{
返回false;
}
公共静态布尔值isBSet()
{
返回true;
}
公共静态布尔值isCSet()
{
返回true;
}
公共静态布尔isDSet()
{
返回true;
}
公共静态整数布尔值(布尔值…布尔值)
{
整数和=0;
for(int i=0;i
试试这个:
if (!(isAset ^ isBset ^ isCset ^ isDset))
只有当任何一个为真或为假时,此选项才为真。尝试以下操作:
if (!(isAset ^ isBset ^ isCset ^ isDset))
这将仅在任何一个为真或为假时为真。如果您可以控制isAset()、isBSet、isCSet和isDset方法的实现,那么如果您从此函数返回1或0而不是true或FALE,则可以更清楚地实现这一点。这些函数将按如下方式创建
public int isAset()
{
return (A != null) ? 1 : 0;
}
若要验证是否设置了多个变量,请使用以下内容
if( isASet() + isBSet() + isCSet() + isDSet() > 1)
ThrowMoreAreSetException()
如果你无法控制,这里有另一种方法
int count = isASet() ? 1 : 0;
count+= isBSet() ? 1 : 0;
count+= isCSet() ? 1 : 0;
count+= isDSet() ? 1 : 0;
if(count > 1)
ThrowMoreAreSetException()
通过遵循这两种方法中的任何一种,代码将比任何比较组合都不那么笨拙,可读性也更高 如果您可以控制isAset()、isBSet、isCSet和isDset方法的实现,那么如果您在此函数中返回1或0而不是true或false,则可以更清楚地实现这一点。这些函数将按如下方式创建
public int isAset()
{
return (A != null) ? 1 : 0;
}
若要验证是否设置了多个变量,请使用以下内容
if( isASet() + isBSet() + isCSet() + isDSet() > 1)
ThrowMoreAreSetException()
如果你无法控制,这里有另一种方法
int count = isASet() ? 1 : 0;
count+= isBSet() ? 1 : 0;
count+= isCSet() ? 1 : 0;
count+= isDSet() ? 1 : 0;
if(count > 1)
ThrowMoreAreSetException()
通过遵循这两种方法中的任何一种,代码将比任何比较组合都不那么笨拙,可读性也更高 在Java 8中,您可以优雅地使用流解决此问题(如果未设置值,则假设值为null):
在Java 8中,您可以优雅地使用流解决此问题(如果未设置值,则假设值为null):
如果我没有错的话,OP在表达式中包含一个错误,即它不考虑<代码> < <代码> >代码> c>代码>。不管怎样,感谢链接到WalfRAM Alpha。如果我没有错的话,OP在表达式中包含一个错误,即它不考虑<代码> < <代码> >代码> c>代码>。无论如何,谢谢你给Wolfram Alpha的链接。首先,如果只有一个是真的,那就是假的(开头有一个否定)。此外,如果其中三个是真的,那么XOR也是真的。我认为表达式不准确。所有四个布尔值不会同时操作,表达式将从左到右求值,因此
true^true^true^false
和true^false^false
将求值为相同的值。很明显,这个表达式并没有给出预期的结果,我的意思就是。顺便说一下,n元异或的求值顺序不会影响结果,因为异或是一个关联运算符