【Processing】ArrayListの要素を押し出す【FIFO】

プログラミング
Photo by Siska Vanhooren on Pixabay

こんにちは、コンスキです。

今回は、ArrayListの要素に要素が追加されるたびに要素が押し出されるスクリプトをご紹介します。

ちなみに、追加されるたびに押し出すというのはFIFO(First In Firs Out)で知られています。

実行画面

今回紹介するスクリプトを実行すると次のようになります。

要素を押し出すとは

要素を押し出すというのは、次のイラストのようなことを言っています。

上のイラストを1ステップずつ説明します。

要素数が5listというArraylistが存在するとします。要素はint型です。

この要素に「list.add(6)」を使って要素を追加します。

この時要素は左に押し出されます。

例えば、先ほどインデックス0の要素だった値1はlistからなくなります。

代わりに、先ほどインデックス1の要素だった値2はインデックス0の要素になります。

もう一度list.add(7)を使って要素を追加します。

スクリプト

先ほど説明したような動作は、次のようスクリプトで実現できます。

ArrayList<Integer> list;
ArrayList<Integer> tmpList;
int nextNum = 6;
void setup() {
  size(400, 200);
  list = new ArrayList<Integer>();
  for (int i = 0; i < 5; i++) {
    list.add(i+1);
  }
  textSize(16);
}
void draw() {
  background(0);
  if(frameCount % 100 == 0 && list.size() != 0) { //フレームカウントが100の倍数の時。ただし、listの要素がなくなったら実行しない。
    //listの要素をtmpListに移動しておく
    tmpList = new ArrayList<Integer>(list);
    //リストの要素を1つ右にずらす
    for (int i = 0; i < list.size()-1; i++) {
      list.set(i, tmpList.get(i+1));
    }
    //listの1番目の要素にもともと最後の要素だったものを入れる
    list.set(list.size()-1, nextNum);
    //次に入れる数字を計算する
    nextNum++;
  }
  //listの全要素を横に並べて表示する
  for (int i = 0; i < list.size(); i++) {
    text(list.get(i), 40 + (i+1)*50, 120);
  }
  //現在のフレーム数を表示する
  text("Frame count: "+frameCount, 130, 70);
}

最後に

今回はArrayListの要素を押し出すスクリプトをご紹介しました

こちらのスクリプトを使えば、画面に決まった数の文字だけを表示するなんてこともできそうです。

コメント

タイトルとURLをコピーしました