2013-09-26 3 views
0

Я пытаюсь добавить объект изображения (изображение черепахи) в ArrayList и каждый отдельный объект появляется в другом месте на экране. Когда я добавляю изображение в ArrayList, я получаю ошибку IndexOutofBounds, и только один из объектов появляется на экране.Исключение IndexOutofBounds при добавлении изображения в ArrayList

Я попытался установить индекс на меньшее значение, но на экране появится только одна Черепаха.

ArrayList<Turtle> list = new ArrayList<Turtle>(); 

public void update(Graphics g) { 
    for(int i=0; i<3; i++){ 
    Random randomNumber = new Random(); 
    int r = randomNumber.nextInt(50); 
     list.add(i+r, turtle); 
     turtle.update(g); 
    } 
} 

Обновление метод в моем классе Turtle выглядит следующим образом:

public void update(Graphics g) { 
    // Move the turtle 
    if (x < dest_x) { 
     x += 1; 
    } else if (x > dest_x) { 
     x -= 1; 
    } 

    if (y < dest_y) { 
     y += 1; 
    } else if (y > dest_y) { 
     y -= 1; 
    } 

    // Draw the turtle 
    g.drawImage(image, x, y, 100, 100, null); 
} 

Спасибо за вашу помощь заранее. Дайте мне знать, если вам нужна дополнительная информация для сортировки этой проблемы.

+0

'я + r' вероятно, больше, чем размер вашего списка. – Tyler

+0

'ArrayList' больше похож на' List', чем на массив. Он не превышает количество элементов в нем. Не путайте поле 'initialCapacity', которое определяет, сколько выделяется MEMORY. Вы все еще ограничены нумерацией элементов от 0 до ArrayList.size-1. – Tenner

ответ

2

Ваш призыв к add кажется неправильным:

list.add(i+r, turtle); 

Вы добавляете в индекс случайное число, которое почти наверняка превышает размер списка. Цитирование из the Javadocs for the add method:

Выдает:

IndexOutOfBoundsException - если индекс находится вне диапазона (индекс < 0 || Индекс> размер())

+0

Это имеет смысл, но как я могу сделать объекты, которые я только что ввел в массив, отображаются в разных местах? Есть ли способ, чтобы добавить вызов изменить значение x и y вызова drawImage? –

+0

Значения 'x' и' y' не имеют ничего общего с позицией объекта в 'ArrayList'. Измените значения 'x' и' y' самостоятельно, как вы считаете нужным. – rgettman

2

С вызовом, как

ArrayList<Turtle> list = new ArrayList<Turtle>(); 
... 
list.add(i+r, turtle); 

i+r, где могли бы оценить в число больше 0 на первой итерации, вы сразу же получите IndexOutOfBoundsException. В Javadoc состояния:

IndexOutOfBoundsException - если индекс находится вне диапазона (индекс < 0 || индекс> размер())

Смежные вопросы