#java #android #arraylist #indexoutofboundsexception
#java #Android #arraylist #исключение indexoutofboundsexception
Вопрос:
ArrayList <String> fil = new ArrayList<String>();
ArrayList <String> lif = new ArrayList<String>();
int x=0;
long tim = System.currentTimeMillis();
Random random = new Random(tim);
for(int i=0;i<fil.size();i )
{
x =random.nextInt(fil.size());
for(int y=0;y<lif.size();y )
{
if(fil.get(x).equals(lif.get(y)))
{
i--;
continue;
}
}
System.out.println("Set the value of x" x);
lif.add(i, fil.get(x));//array index out of bound exception
}
Я пытаюсь скопировать содержимое ArrayList fil
в lif
в другом порядке, но я получаю ArrayIndexOutOfBoundException
в прокомментированной строке. Я использую вложенный цикл for, чтобы проверить, уникальны ли элементы нового ArrayList.
Комментарии:
1. Всем большое спасибо 🙂 Я использовал метод Collections.shuffle и он великолепен 🙂
Ответ №1:
Почему бы вам не попробовать методы Collections.copy и Collections.shuffle.
Ответ №2:
Не является ли Collections.shuffle лучшей альтернативой?
Ответ №3:
«lif»-ArrayList должен быть предварительно выделен для хранения элементов «fil.size()» перед перетасовкой содержимого. Попробуйте добавить нулевые элементы «fil.size()» перед входом в цикл for.
Внимание! Это очень неэффективный подход к выполнению перетасовки, см. Collections.reshuffle() для лучшего подхода.
Ответ №4:
if(fil.get(x).equals(lif.get(y)))
{
i--;
continue;
}
Одна из возможных проблем заключается в том, что ‘i’ равно 0 (нулю). Уменьшение i--
установит ‘i’ равным -1, что вызовет исключение с… lif.add(i, fil.get(x));
Возможно, это не ответ, но вы должны проверять, что i, x и y находятся в пределах объектов ArrayList.
Ответ №5:
Измените прокомментированную строку на:
lif.add(fil.get(x));
Это должно исправить исключение. Однако ваш алгоритм выглядит не очень хорошо.
Ответ №6:
Измените код на этот и проверьте, работает ли это
x =random.nextInt(fil.size() - 1);
Комментарии:
1. Из документации nextInt (int n): Возвращает псевдослучайное, равномерно распределенное значение int между 0 (включительно) и указанным значением (исключительным), полученное из последовательности этого генератора случайных чисел.