比较三个不同的值并相应地返回true false?

时间:2017-02-18 05:09:05

标签: java algorithm

我有一个下面的代码,它接受三个输入参数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;
}

有更好的方式来写这个吗?

3 个答案:

答案 0 :(得分: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 > cc < b的含义相同,我们可以消除冗余:

a < value && (b < c || b > c)

并测试b是否小于或大于c与测试它们不相等是一样的:

a < value && b != c

如上所示,a < valuec > 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>valueb==c时才会失败。

2)在increment中,您只需将输入参数相乘:

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

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