Не получается избавиться от исключения ArrayIndexOutOfBoundsException
Вопрос следующий: у меня есть активы и серийные номера к ним. Когда количество серийных номеров больше или равно количеству активов, программа работает корректно. Ниже пример кода, где я прохожу по каждому активу в цикле и присваиваю ему серийный номер. У 1 актива должен быть только 1 серийный номер:
String[] arrayOfStringsSerialNumbers = contractPosition.getSerialNumbers().split("\n");
for (int i = 0; i < (contractPosition.getByElement() ? contractPosition.getQtyRemain() : 1); i++) {
Asset asset = metadata.create(Asset.class);
asset = templateService.getEntityWithAppliedTemplate(asset);
asset.setSerialNo(arrayOfStringsSerialNumbers[i]);
}
Проблема возникает тогда, когда количество серийных номеров вводится меньше, чем активов. Тогда и выбрасывается ArrayIndexOutOfBoundsException. Я пока дошел до такого примитивного решения, но оно меня не устраивает:
if (arrayOfStringsSerialNumbers.length < contractPosition.getQtyRemain()) {
asset.setSerialNo("");
} else {
asset.setSerialNo(arrayOfStringsSerialNumbers[i]);
}
При таком решении, если количество серийных номеров меньше, чем количество активов, то для каждого актива в поле "Серийный номер" будет пустая запись. Мне же нужна следующая логика: если активов 3, а серийных номеров, например, 1, то для первого актива серийный номер запишется, а для двух других нет - у них будет пустая запись в этом поле. Как мне это сделать?
Ответы (1 шт):
Как вариант, с запоминанием количества активов в отдельной переменной, и использованием тернарного оператора.
String[] serialNumbers = contractPosition.getSerialNumbers().split("\n");
int assetCount = contractPosition.getByElement() ? contractPosition.getQtyRemain() : 1;
for (int i = 0; i < assetCount; i++) {
Asset asset = metadata.create(Asset.class);
asset = templateService.getEntityWithAppliedTemplate(asset);
asset.setSerialNo(i < serialNumbers.length ? serialNumbers[i] : "");
}