我有三个整数,它们在作为命令行参数传入后分配给变量。我想验证每个整数都在 1-5 范围内。有没有一种方法可以在不使用如下 if 语句的情况下在 Java 中实现这一点?我想避免这样做(注意伪代码):
if ((a & b & c) > 0 && (a & b & c) < 6) {
//blah blah
}
主要是,如果将来添加其他参数等,这将无法很好地扩展。有没有更优雅的方法来实现这一点?
我有三个整数,它们在作为命令行参数传入后分配给变量。我想验证每个整数都在 1-5 范围内。有没有一种方法可以在不使用如下 if 语句的情况下在 Java 中实现这一点?我想避免这样做(注意伪代码):
if ((a & b & c) > 0 && (a & b & c) < 6) {
//blah blah
}
主要是,如果将来添加其他参数等,这将无法很好地扩展。有没有更优雅的方法来实现这一点?
我认为可以做出的唯一改进(为了可读性)是:
public boolean isInRange(int i) {
return i > 0 && i < 6;
}
然后改为调用该函数。
如果a
、b
和c
相关,您也可以考虑使用数组并循环遍历它。就像是:
public boolean allInRange(int[] arr) {
for (int i = 0; i < arr.length; i ++) {
if (!isInRange(arr[i])) return false;
}
return true;
}
像这样的东西怎么样:
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);
您可以创建一个向其传递整数的方法,该方法可以返回 aboolean
取决于它是否在范围内。
另一种方法是创建一个接收整数列表List<Integer> myList
或整数数组的方法,并检查每个整数是否在范围内。
这是一种不使用多个&&
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
}