有没有更简单的方法来检查if语句中的多个变量

时间:2019-02-26 01:45:07

标签: java

我想检查t1,t2和t3,看它们是否在13-19的范围内。如果三个中至少有一个是我想返回true,如果它们都不是我想返回false 。这段代码有效,但是我想知道是否有更简洁的编写方式,例如:

if (t1 || t2 || t3 >13 && <19) return true else return false?

这是我当前的代码。

public class NumberChecker {

    public static boolean hasNumber(int t1, int t2, int t3) {

        if (  (t1 >=13 && t1 <=19)   ||   (t2 >=13 && t2 <=19)   ||   (t3 >=13 
        && t3 <=19)  ) {
            return true;
        } else return false;
    }

}

欢呼

2 个答案:

答案 0 :(得分:3)

每当您发现自己写import pandas as pd import numpy as np df = pd.read_csv("file1.csv", index_col=0, header=1) values = df.loc['利用額(Fee込み)', '全体'].astype(str).apply(lambda x: x.split(".")[0]) 时,请意识到您可以用较短且等效的if (x) return true; else return false;代替它。乍一看似乎很奇怪,但是可以直接返回布尔条件。您无需检查它们是否为真,然后返回true。

return x;

然后,您可以选择将公共范围检查逻辑提取到辅助方法中。它使代码更长一些,但是冗余更少。如果您更喜欢此版本,则取决于您;这确实是一个美学决定。

public static boolean hasNumber(int t1, int t2, int t3) {
    return (t1 >=13 && t1 <=19) || (t2 >=13 && t2 <=19) || (t3 >=13 && t3 <=19);
}

答案 1 :(得分:0)

您可以使用stream和匿名lambda function一行进行匹配:

return IntStream.of(t1, t2, t3).anyMatch(t -> t >= 13 && t <= 19);

或者您可以使用varargs根据参数自动构建数组:

public static boolean hasNumber(int... ts) {
    for (int t: ts) {
        if (t >= 13 && t <= 19) {
            return true;
        }
    }

    return false;
}

(答案为@shmosel