我有一个下面的代码,它接受三个输入参数a,b和c,并比较三个不同的值和基础,它返回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;
}
有更好的方式来写这个吗?
答案 0 :(得分:3)
您的代码中有一个未定义的方法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
答案 1 :(得分:1)
我唯一可以减少的是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;
}
答案 2 :(得分:1)
也许你可以澄清你想在这里做什么,你已经解决的代码是非常重复的,看起来它可能有逻辑错误......
至于简化:
1)if
中的compare
可以大大简化:
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
,这正是乘法所做的...