Java объединяет два набора массивов из пользовательского ввода - как мне иметь дело с Nulls?

StackOverflow https://stackoverflow.com/questions/4801658

  •  22-10-2019
  •  | 
  •  

Вопрос

Я пишу программу для задания класса 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, оберните звонок в блок 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;
}

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top