我想实现方法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)
且没有新方法的情况下实现?有一个递归的解决方案吗?
答案 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;
}