我怎样才能简化这个程序来检查青少年?

时间:2021-07-26 11:51:19

标签: java

我对 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));
    }
}

2 个答案:

答案 0 :(得分:6)

这样的事情怎么样——只是检查一个数字条件?这也快得多(考虑到要检查的年龄有多少,这并不是在这种情况下真的很重要)。

    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() 接受任意多个参数,例如hasTeen(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()) 永远为真。

答案 1 :(得分:5)

您将列表引入到一个简单的任务中,使它变得过于复杂。以下方法将完成这项工作:

public static boolean isTeen(int n) {
  return n >= 13 && n <= 19;
}