Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何确保使用try-catch输入正确的命令行参数?_Java_Validation_Try Catch - Fatal编程技术网

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-and-catch异常,以确保提供了两个参数并且这些参数是可接受的


提前感谢您抽出时间

您肯定不会使用
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
开始,并在比较元素的数量显著增加的情况下进行重构。

根据注释

  • 首先检查输入的长度是否正好为2

  • 检查是否相等

  • 代码:


    通过创建自定义异常类,但这不是一个好主意。使用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)
    }