0

我正在编写一个用于 CS 课程作业的程序。

基本上,它是一种采用命令行参数的方法。类似于 CSV 的东西,所以要调用我做的调用,然后是 csv。

例如合并 1,2,3,4 5,6,7,8

这将做两件事。1)它将每个列表作为一个数组参数,然后合并到一个大数组中,2)它对该数组进行排序。

这是关键,我们需要从命令行处理空值。所以用户可以输入:

合并 1,2,,3,4 5,6

我该如何处理?

错误输出示例:

Enter commands:
merge 12,,2 43
java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:493)
    at java.lang.Integer.parseInt(Integer.java:514)
    at CmdInterpreter.strArrayToIntArray(CmdInterpreter.java:143)
    at CmdInterpreter.getIntArray(CmdInterpreter.java:130)
    at Assign1.processOneCommand(Assign1.java:99)
    at CmdInterpreter.processCommands(CmdInterpreter.java:198)
    at CmdInterpreter.processCommands(CmdInterpreter.java:230)
    at CmdInterpreter.ooMain(CmdInterpreter.java:243)
    at MyAssign1.main(MyAssign1.java:20)
4

4 回答 4

1

当您调用 parseInt 时,将调用包装在 try/catch 块中。如果您捕获到 NumberFormatException,请丢弃该字符串并减少值的数量。

编辑:你是怎么做到的?像这样的东西:

int[] extractValues(String arg) {
    String[] sValues = arg.split(",");
    int n = values.length;
    int[] values = new int[n];
    for (int i = 0; i < n; ++i) {
        try {
            values[i] = Integer.parseInt(sValues[i]);
        } catch (NumberFormatException e) {
            --n;
        }
    }
    // reallocate values array if there were problems
    if (n < values.length) {
        int[] tmp = new int[n];
        System.arraycopy(values, 0, tmp, 0, n);
        values = tmp;
    }
    return values;
}
于 2011-01-26T05:40:07.570 回答
0

您需要处理那里没有整数的事件。看来您只是盲目地循环输入而不检查其完整性,这就是您遇到异常的原因。

正确的方法是建立一个检查机制,确保您正在解析的当前数据是有效的(在这种情况下,意味着它是一个整数)。

我的答案非常含糊,因为您明确表示这是针对学校作业的,因此您应该接受此答案并使用它来进行实验并学习实施适当的解决方案。

于 2011-01-26T05:38:08.653 回答
0

StringUtils.split应该为您提供大约十种方法来做到这一点。

于 2011-01-27T22:33:05.740 回答
0

我发现您可以将 list1 输入为 null 或 list2 或两者兼而有之。但不是这些数组的元素......这意味着我正在尝试一些不会成为这个任务问题的东西。

于 2011-01-27T22:14:11.760 回答