Java Объединение двух наборов массивов из пользовательского ввода - Как мне работать с нулями? - PullRequest
0 голосов
/ 26 января 2011

Я пишу программу для задания класса 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)

Ответы [ 4 ]

1 голос
/ 26 января 2011

Когда вы вызываете 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;
}
0 голосов
/ 28 января 2011

StringUtils.split должно дать вам около десяти способов сделать это.

0 голосов
/ 28 января 2011

Я обнаружил, что вы можете указать в списке list1 значение null, list2 или оба.Но не элементы этих массивов ... Значит, я пытался что-то, что не будет проблемой для этого назначения.

0 голосов
/ 26 января 2011

Вам нужно обработать событие, когда там нет целого числа.Похоже, что вы просто вслепую просматриваете ввод, не проверяя его целостность, поэтому вы получаете исключение.

Правильный способ сделать это - установить механизм проверки, который гарантирует, чтотекущие данные, которые вы анализируете, действительны (в данном случае это означает целое число).

Я оставляю свой ответ очень расплывчатым, потому что вы явно указали, что это для школьного задания, поэтому вам следует принять этот ответи использовать его, чтобы экспериментировать и научиться реализовывать правильное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...