2

我有三个整数,它们在作为命令行参数传入后分配给变量。我想验证每个整数都在 1-5 范围内。有没有一种方法可以在不使用如下 if 语句的情况下在 Java 中实现这一点?我想避免这样做(注意伪代码):

if ((a & b & c) > 0 && (a & b & c) < 6) {
//blah blah
}

主要是,如果将来添加其他参数等,这将无法很好地扩展。有没有更优雅的方法来实现这一点?

4

4 回答 4

10

我认为可以做出的唯一改进(为了可读性)是:

public boolean isInRange(int i) {
    return i > 0 && i < 6;
}

然后改为调用该函数。

如果abc相关,您也可以考虑使用数组并循环遍历它。就像是:

public boolean allInRange(int[] arr) {
    for (int i = 0; i < arr.length; i ++) {
        if (!isInRange(arr[i])) return false;
    }
    return true;
}
于 2013-02-18T21:56:52.497 回答
6

像这样的东西怎么样:

validate(int ... args) {
    for (int arg : args) {
        if (arg < 1 || arg > 5) {
            throw IllegalArgumentException("Argument is not in valid range [1..5]: " + arg);
        }
    }
}

然后调用这个辅助方法

validate(a,b,c);
于 2013-02-18T22:01:22.583 回答
1

您可以创建一个向其传递整数的方法,该方法可以返回 aboolean取决于它是否在范围内。

另一种方法是创建一个接收整数列表List<Integer> myList或整数数组的方法,并检查每个整数是否在范围内。

于 2013-02-18T21:58:56.720 回答
1

这是一种不使用多个&&s 的更快方法(仅适用于整数):

private static boolean isInRange(int num, int min, int max) {
    return (num - min - Integer.MIN_VALUE) <= (max - (1 - Integer.MIN_VALUE));
}

用法:

public static void main(String[] args) {
    System.out.println(isInRange(5,1,7)); // true
    System.out.println(isInRange(5,1,3)); // false
}
于 2013-02-18T22:05:33.113 回答