对不起,我是菜鸟...
我有一个方法,该方法需要两个特定的命令行参数来创建对象:
Number data = new Number(arg[0], arg[1]);
可接受的参数是:
arg[0]
只能是:10
,20
或30
。arg[1]
只能是:2
,4
或6
。如何创建一个try and catch异常,以确保提供了两个参数并且该参数是可接受的?
提前感谢您的时间。
答案 0 :(得分:2)
您绝对不能使用try-catch
控制流-这是一种不好的做法。因此,存在if-else
语句。
boolean conditionArg0 = arg[0] == 10 || arg[0] == 20 || arg[0] == 30;
boolean conditionArg1 = arg[1] == 2 || arg[1] == 4 || arg[1] == 6;
if (conditionArg0 && conditionArg1) {
// input is fine, go on
} else {
// display error
}
您应首先检查数组arg
是否至少具有2个值,否则将抛出NullPointerException
。
如果允许的值更多,最好使用Set<Integer>
并搜索该值是否存在。如果允许的值遵循一个模式(例如可以被10整除),那么最好使用计算代替Set
。
编辑:为什么使用try-catch
控制流被认为是不好的做法? here和here已经讨论了很多次。有很多争论,我发现最重要的争论(取自here):
例外是针对特殊情况,而不是正常的流量控制。应该使用异常处理来处理意外的/异常情况,而不是像正常的程序流程那样处理,因为否则,未捕获的异常将告诉您更少的信息。
在语义上,使用if-else
是控制流量的一种干净方法。您应该始终以if-else
开始,并进行重构,以防被比较元素的数量显着增加。
答案 1 :(得分:0)
基于评论
首先检查输入的长度是否恰好为2。
检查是否相等。
代码:
for file in "(*) - (*)" ; do mv "${file}" "$(($1+5)) - ${2}" ; done
答案 2 :(得分:0)
通过创建自定义异常类,这不是一个好主意。使用if else既容易又好