Робота з ArrayList в Processing

У прикладі Робота з масивами ми навчилися працювати з масивами, але робота з Маів має свої обмеження Ви не можете просто додавати або видаляти обєкти Структура даних ArrayList працює аналогічно звичайним масивам обєктів, але додавати і видаляти обєкти в цьому випадку простіше

Як це робиться

Почніть з збереження вашого скетчу по імям working_with_arraylistspde Наступне, що потрібно зробити – додати нову вкладку і зберегти її як MyObject Це робиться натисканням кнопки зі стрілкою у верхній частини PDE або поєднанням клавіш Shift + Cmd + N на Mac або Shift + Ctrl + N на Windows і Linux

У цій вкладці ми напишемо невеликий клас з двома методами Цей клас ми викорис для створення обєктів нашого ArrayList

class MyObject

{

float x float y

MyObject()

{

x = random( width ) y = random( height )

}

void update()

{

y–

}

void render()

{

ellipse( x, y, 60, 60 )

}

}

Коли ви напишете код для класу MyObject ви можете переключитися на вкладку

working_ with_arraylists у функції setup ()

ArrayList&ltMyObject&gt myList

void setup()

{

size( 640, 480 )

smooth()

myList = new ArrayList&ltMyObject&gt() for ( int i = 0 i &lt 4 i++ ) {

myListadd( new MyObject() )

}

}

У функції draw () ми переберемо всі обєкти в зворотному порядку, оновимо їх і Нісу на екрані Перебирати обєкти потрібно в зворотному порядку, так як нам потрібно видаляти обєкти динамічно

void draw()

{

background( 255 )

fill( 255, 128 )

stroke( 0 )

for ( int i = myListsize() – 1 i &gt= 0 i– ) { MyObject o = (MyObject)myListget( i ) oupdate()

orender()

if ( oy &lt= 0 ) { myListremove( i )

}

}

}

Останнє, що потрібно зробити – додати функцію mousePressed () До списку буде бодавлен новий обєкт, а при натисканні на кнопку миші на консоль буде виведено число елементів

void mousePressed()

{

myListadd( new MyObject() )

println( &quotTotal elements in List: &quot + myListsize() )

}

Коли ви запустите скетч, ви побачите таке зображення:

Як це працює

Перше, що потрібно зробити – оголосити ArrayList перед функцією setup () Це робиться за допомогою наступного коду:

ArrayList myList

Також в можете додати до списку тип даних, якщо вже знаєте, які обєкти будете зберігати там У цьому прикладі я додав тип даних MyObject

ArrayList&ltMyObject&gt myList

У функції setup () тепер потрібно створити порожній ArrayList Далі я показав, як зробити це з зазначенням або без зазначення типу даних

myList = new ArrayList() // without datatype

myList = new ArrayList&ltMyObject&gt() // with datatype

За допомогою методу add () ви можете додати елементи до масиву У цьому прикладі я використовував звичайний цикл for для додавання обєктів Для додавання одного обєкта потрібно ввести наступний рядок коду:

myListadd( new MyObject() )

За допомогою методу remove () ви можете видалити обєкти зі списку Для цього в метод потрібно ввести номер видаляється елемента Для видалення першого елемента викличте метод myListremove (0)

Додатково

Існують і інші способи доступу до елементів ArrayList Якщо ви додали тип даних до ArrayList приблизно так, як у функції setup (), (myList = new ArrayList () ), можна використовувати цю спрощену форму для циклу for Вам більше не потрібно замислюватися про тип даних елемента Цей прийом працює також якщо ви хочете отримати доступ до масиву обєктів

for ( MyObject o : myList ) { oupdate()

orender()

}

Інший спосіб роботи з ArrayList – ітератор Отримати доступ до ітератори можна викликавши метод iterator () у своєму ArrayList Метод hasNext () в ітератори повертає істину (true), якщо елементи далі ще є, і брехня (false), якщо цей елемент – останній Метод next () в ітератори використовується для отримання наступного обєкта у списку

Iterator itr = myListiterator() while ( itrhasNext() ) {

MyObject o = (MyObject)itrnext() oupdate()

orender()

}

Джерело: Ян Вантомм, Processing 2: креативне програмування, переклад з англійської Олександри Мішутіної, Published by Packt Publishing Ltd, 2012, BIRMINGHAM – MUMBAI

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*