2017-02-18 80 views
-4

我有下面的代码这需要三个输入参数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; 
} 

没有更好的方法来写这个?

+4

没有告诉我们任何事情“并在此基础上”。我们无法读懂你的想法。你什么时候想要结果是真实的,什么时候你想要它是假的。 – ajb

+0

你应该在括号中明确'&&'和'||'的分组,读者不应该查找布尔运算符的优先级来找出你的代码在做什么 – River

+0

@河,他可以放在所有的他喜欢的括号,它仍然不会帮助我们弄清楚他的代码在做什么 – ajb

回答

3

你在你的代码中有一个未定义的方法u。假设uincrement拼写错误,那么这是最简单的,你可以得到:

public boolean compare(int a, int b, int c) { 
    return c > 1 && b != c; 
} 

increment函数返回两个数的乘积(这意味着它的名称有误)。如果valueincrement(a, c),则valuea * c。如果你比较a < a * c,并考虑到ac大于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 
+0

哇,'u' *是'增量'的拼写错误...我认为这是一个假设。 SO继续留下深刻印象。在完成这一切之后,简化它的所有内容 – River

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; 
} 
1

也许你可以澄清你想在这里做的,代码是什么,你已经把它出来是非常重复的,看起来它可能有逻辑错误......

至于简化:

1)在compareif可以大大简化:

if (a < value && b!=c) { 
    return true; 
} 

这是为导致您在||的两侧测试a < value,然后在另一侧测试b<c,另一侧测试c<b。因此,这只有在a>valueb==c时才会失败。

2)increment你可以乘以你的输入参数:

private int increment(int a, int c) { 
    return a*c; 
} 

您添加a的次数等于c,这正是乘法呢......

相关问题