проблема с генерацией случайных чисел - PullRequest
0 голосов
/ 20 мая 2011
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.

Ответы [ 6 ]

3 голосов
/ 20 мая 2011

Почему бы вам не попробовать методы Collections.copy и Collections.shuffle .

2 голосов
/ 20 мая 2011

Разве Collections.shuffle не является лучшей альтернативой?

1 голос
/ 20 мая 2011

Должен быть заранее выделен список «lif» -ArrayList для хранения элементов «fil.size ()» перед перестановкой содержимого. Попробуйте добавить нулевые элементы fil.size () перед входом в цикл for.

Внимание! Это очень неэффективный подход к перестановке, для лучшего подхода см. Collections.reshuffle () .

0 голосов
/ 20 мая 2011

Измените код на это и проверьте, работает ли он

x =random.nextInt(fil.size() - 1);
0 голосов
/ 20 мая 2011

Изменить закомментированную строку на:

lif.add(fil.get(x));

Это должно исправить исключение. Однако ваш алгоритм выглядит не очень хорошо.

0 голосов
/ 20 мая 2011
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.

...