У меня есть кусок кода на Java (Android), который иногда генерирует ArrayIndexOutOfBoundsException.Почему этот код генерирует ArrayIndexOutOfBoundsException?
String characterLevel = mCharacterModel.CharacterLevel() >=
MessageModel.CharacterLevels.length ? "Hyperion Overlord" :
MessageModel.CharacterLevels[mCharacterModel.CharacterLevel()];
Метод mCharacterModel.CharacterLevel() всегда равно 1 или более.
Массив MessageModel.CharacterLevels определяется следующим образом и содержит около 50 элементов.
public static final String[] CharacterLevels = { "Title", "Title" };
Суть вопроса о грациозно недобросовестный к другому источнику данных, если размер массива был превышен.
Должно быть, что-то не хватает. Это неправильный способ установить строку по умолчанию в строку?
Я искал решения повсюду, о которых я могу думать, и я обеспокоен. Я просто пропустил некоторые основные недостатки в логике выше.
Любая помощь или предложения оценены.
Так что мне интересно - если вы решили, что это проблема, что оказалось проблемой? – Krease
Крушение происходит от Star Traders RPG на консоли разработчика Google Play, поэтому я только предполагаю, что исправил ее. Я так и не смог воспроизвести крах. Я внес изменения, как было предложено - теперь я называю mCharacterModel.CharacterLevel() один раз, в случае, если другие потоки обновляют статистику персонажа. Я также добавил проверку, чтобы гарантировать, что уровень не является отрицательным. CharacterLevels [] никогда не изменяется, поэтому я пропустил это. Я также переработал код, похожий на предложение, которое вы сделали ниже. Теперь я смотрю «Отчеты об ошибках» и держу пальцы. Еще раз спасибо! –