我怎样才能简化这个程序来检查青少年的年龄?
我对 Java 相当陌生,我正在尝试改进我的代码。有没有人有任何建议来简化这个程序,该程序检查是否将青少年号码(13-19)传递到方法中?或者如果有更好的方法来构建它。谢谢。
import java.util.Arrays;
import java.util.List;
public class TeenNumberChecker {
public static void main(String[] args) {
System.out.println(hasTeen(1,1,13));
System.out.println(isTeen(14));
}
public static boolean hasTeen(int a, int b, int c){
List<Integer> teenValues = Arrays.asList(13, 14, 15, 16, 17, 18, 19);
return (teenValues.contains(a)) || (teenValues.contains(b)) || (teenValues.contains(c));
}
public static boolean isTeen(int d){
List<Integer> teenValues = Arrays.asList(13, 14, 15, 16, 17, 18, 19);
return (teenValues.contains(d));
}
}
回答
这样的事情怎么样——只是检查一个数字条件?这也快得多(考虑到要检查的年龄有多少,这并不是在这种情况下真的很重要)。
public static boolean hasTeen(int a, int b, int c){
return isTeen(a) || isTeen(b) || isTeen(c);
}
public static boolean isTeen(int d){
return d >= 13 && d <= 19;
}
减少或消除代码重复是一种很好的做法,例如通过使hasTeen()依赖于的结果isTeen(),因此条件只需要编写一次。
如果您想hasTeen()接受任意多个参数,以便 eghasTeen(19)和hasTeen(19,1,1,1)两者都可以工作,您可以将 的定义替换为hasTeen():
public static boolean hasTeen(int... ages) {
for (int age : ages) {
if (isTeen(age)) {
return true;
}
}
return false;
}
这称为可变参数列表(或varargs)语法。为了缩短这个函数的定义,你可以研究一些所谓的“函数式编程”语法,使用流,它能够更简洁地表达迭代值集合以检查条件(在这个case isTeen()) 永远是真的。
- `return IntStream.of(ages).anyMatch(TeenNumberChecker::isTeen);` 是表示它的流方式。
回答
通过在其中引入列表,您将一个简单的任务变得过于复杂。以下方法将完成这项工作:
public static boolean isTeen(int n) {
return n >= 13 && n <= 19;
}