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

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


以上是我怎样才能简化这个程序来检查青少年的年龄?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>