实现一个方法,如果所有参数都在范围内,则返回true

时间:2014-04-26 11:08:32

标签: java recursion refactoring

我想实现方法s,例如:

  

给定2个int值,如果它们中的任何一个在范围内,则返回true   10..20包含。

答案很简单:

public boolean s(int a, int b) {    
    return (a > 9 && a < 21) ||  (b > 9 && b < 21);
}

但是如何在没有重复使用模式(x > 9 && x < 21)且没有新方法的情况下实现?有一个递归的解决方案吗?

4 个答案:

答案 0 :(得分:3)

使用varargs尝试此代码,并传递任意数量的int值进行测试。

  

实现一个方法,如果任何参数在

范围内,则返回true

根据您的问题 - 如果它们中的任何一个在10..20范围内,则返回true。

public boolean s(int... a) {
    for (int i : a) {
        if (i > 9 && i < 21) {
            return true;
        }
    }
    return false;
}

- 编辑 -

  

实现一个方法,如果所有参数都在

范围内,则返回true
public static boolean s(int... a) {
    for (int i : a) {
        if (i < 10 || i > 20) {
            return false;
        }
    }
    return (a.length > 0);
}

- 编辑 -

在方法开头检查如果需要,但我从不建议您使用它。

    if (a.length != 2) {
        throw new IllegalArgumentException("It accepts only two arguments");
    }

- 编辑 -

根据您的要求,如果您无法更改可能来自接口或超类的方法签名。

public boolean s(int a, int b) {

    int[] array = new int[] { a, b };

    for (int i : array) {
        if (i > 9 && i < 21) {
            return true;
        }
    }
    return false;
}

答案 1 :(得分:1)

添加新方法,或者让“代码重复”生效。 这是代码行的一半(一半),说实话并不是真的重复。

答案 2 :(得分:1)

如果您正在寻找递归解决方案,那么我建议:

public static boolean s(int a, int b) {
    if (b == 0) {
        return (a > 9 && a < 21);
    }
    return (a > 9 && a < 21) || s(b, 0);
}

但是,这比原始解决方案的可读性差得多。


编辑 Per @طاهر,更简洁的版本

public static boolean s(int a, int b) {
    boolean r = (a > 9 && a < 21); 
    return b == 0 ? r : r || s(b, 0); 
}

答案 3 :(得分:1)

你也可以尝试这个,但它不是最好的解决方案:

public static boolean s(int a, int b) {
    int n = a * b;
    if (a == 0)
        n = b;
    if(b == 0)
        n = a;
    for (int i = 10; i < 21; i++)
        if( n % i == 0 )
            return true;
    return false;
}