比较三个不同的值并相应地返回true false?
我有下面的代码这需要三个输入参数a,b和c和比较上,它返回true虚假三个不同的价值观和基础..比较三个不同的值并相应地返回true false?
public boolean compare(int a, int b, int c) {
int value = increment(a, c);
if (a < value && b < c || a < value && b > c && c < b) {
return true;
}
return false;
}
private int increment(int a, int c) {
int f = 0;
for (int i = 0; i < c; i++) {
f += a;
}
return f;
}
没有更好的方法来写这个?
你在你的代码中有一个未定义的方法u
。假设u
是increment
拼写错误,那么这是最简单的,你可以得到:
public boolean compare(int a, int b, int c) {
return c > 1 && b != c;
}
你increment
函数返回两个数的乘积(这意味着它的名称有误)。如果value
是increment(a, c)
,则value
是a * c
。如果你比较a < a * c
,并考虑到a
和c
大于0,则由于a*c
等于a
如果c==1
和大于a
如果c>1
,然后a < a * c
等同于测试是否c > 1
。
看看您的条件,((a < value && b < c) || (a < value && b > c && c < b))
:如果||
附近的任一表达式为真,则返回true。但在这两种情况下,a < value
必须是真实的。所以我们可以提取它。因此,对于表达式为真,a < value
必须是真实的,那么无论是表达式的其余部分的必须是真实的,因此上述相当于
a < value && (b < c || (b > c && c < b))
并且由于b > c
意味着同样的事情c < b
我们可以消除冗余:
a < value && (b < c || b > c)
和测试是否b
或者是小于或大于c
更大相同的测试,他们是不相等的:
a < value && b != c
,并经证实,以上,a < value
相同c > 1
,从而
c > 1 && b != c
哇,'u' *是'增量'的拼写错误...我认为这是一个假设。 SO继续留下深刻印象。在完成这一切之后,简化它的所有内容 – River
我唯一可以减少的是你的increment()
,它可以是单行表达式。在if
条件中也使用括号使其更加清楚。另外b>c && c<b
是两个相同的东西,只将其减少到b>c
。
public boolean compare(int a, int b, int c) {
int value = a*c;
if (a < value && b < c || a < value && b > c) {
return true;
}
return false;
}
也许你可以澄清你想在这里做的,代码是什么,你已经把它出来是非常重复的,看起来它可能有逻辑错误......
至于简化:
1)在compare
if
可以大大简化:
if (a < value && b!=c) {
return true;
}
这是为导致您在||
的两侧测试a < value
,然后在另一侧测试b<c
,另一侧测试c<b
。因此,这只有在a>value
或b==c
时才会失败。
2)increment
你可以乘以你的输入参数:
private int increment(int a, int c) {
return a*c;
}
您添加a
的次数等于c
,这正是乘法呢......
没有告诉我们任何事情“并在此基础上”。我们无法读懂你的想法。你什么时候想要结果是真实的,什么时候你想要它是假的。 – ajb
你应该在括号中明确'&&'和'||'的分组,读者不应该查找布尔运算符的优先级来找出你的代码在做什么 – River
@河,他可以放在所有的他喜欢的括号,它仍然不会帮助我们弄清楚他的代码在做什么 – ajb