Java-如何确保使用try-catch输入正确的命令行参数?
对不起,我是一个傻瓜 我有一个方法,它使用两个特定的命令行参数来创建对象:Java-如何确保使用try-catch输入正确的命令行参数?,java,validation,try-catch,Java,Validation,Try Catch,对不起,我是一个傻瓜 我有一个方法,它使用两个特定的命令行参数来创建对象: Number data = new Number(arg[0], arg[1]); 可接受的论据有: arg[0]只能是:10、20或30 arg[1]只能是:2、4或6 如何创建一个try-and-catch异常,以确保提供了两个参数并且这些参数是可接受的 提前感谢您抽出时间 您肯定不会使用try catch控制流量-这是一种糟糕的做法。因此,存在if-else语句 boolean conditionArg0 =
Number data = new Number(arg[0], arg[1]);
可接受的论据有:
只能是:arg[0]
、10
或20
30
只能是:arg[1]
、2
或4
6
提前感谢您抽出时间 您肯定不会使用
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
如果允许的值更多,最好使用设置
并搜索是否存在该值。如果允许的值遵循一种模式(例如,可被10整除),那么最好使用计算而不是集
编辑:为什么使用
try-catch
控制流量被认为是一种不好的做法?它已经被讨论过很多次了。有很多论点,我认为最重要的是(取自):
例外情况适用于例外情况,而非正常流量控制。我们应该使用异常处理来处理意外/异常情况,而不是像正常的程序流那样,因为否则,一个未捕获的异常将告诉您更少的信息
从语义上讲,使用
if-else
是控制流的干净方法。您应该始终从if-else
开始,并在比较元素的数量显著增加的情况下进行重构。根据注释
通过创建自定义异常类,但这不是一个好主意。使用if-else既简单又好为什么
特别尝试catch
,而不是if-else
?您的问题不清楚,首先验证args数组的大小if(args.length==2)
,然后proceed@Susmit阿格拉瓦尔:那怎么办?如果用户输入错误的参数或没有参数,程序将停止并显示错误。我想你应该解释一下为什么这是个坏习惯。还有,如果其他方法更好的话,为什么。@snr:好的,谢谢:)我已经编辑了我的答案,指出了原因。我不想花费我的大部分答案来解释为什么这(不是)一个糟糕的做法,而是给出一个解决方案。
if(arg!=null && arg.length==2){
if( (arg[0].equals("10") || arg[0].equals("20") || arg[0].equals("30"))
&& (arg[1].equals("2") || arg[1].equals("4") || arg[1].equals("6")) ) {
Number data = new Number(arg[0], arg[1]);
}
else{
//Handle wrong input(s)
}
}
else{
//Handle wrong input(s)
}