我正在编写针对CS课程分配的程序。

基本上,这是一种命令行参数的方法。像CSV之类的东西,所以我要打电话给我合并的是CSV。

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

这将做两件事。 1)将每个列表作为一个数组参数,然后将其合并为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)
有帮助吗?

解决方案 3

我发现您可以在list1中以null或list2或两者兼而有之。但是不是这些数组的元素……这意味着我正在尝试这些作业不是问题的东西。

其他提示

当您致电ParseInt时,将通话包裹在尝试/捕获块中。如果您捕获数字formatexception,请扔掉字符串并减少值的数量。

编辑:您如何做?这样的事情:

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;
}

您需要处理那里没有整数的事件。看来您只是盲目地通过输入循环,而无需检查其完整性,这就是为什么您会得到例外的原因。

这样做的正确方法是设置检查机制,以确保您正在解析的当前数据有效(在这种情况下,这意味着它是整数)。

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

Stringutils.split 应该给您大约十种做到这一点的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top