2011年05月15日

最近はまったこと その2(コレクションのスタック)

(その1からご覧ください)
ArrayListに順番に項目を追加をしていって、ある条件が来たら特定の項目まで戻り、新しいデータを追加し直すというコードを書こうと思いました。
つまり、
a
a b
a b c
と項目を追加して、1番目の項目を残して後戻りするという条件が成立したら
a b2 c2 ...
とaを残して2番目から新しい項目を追加し直していくというものです。

それで最初num番目の項目へ戻る(numを残してそれ以降を削除する)という部分を
for(int i=num;i<arrayList.size();i++){
arrayList.remove();
}
と書いて、これでnum以降最後までの要素を削除できると思い込んでいたのですが、arrayList.remove()をすると、要素の数も減ってしまうので、終了条件のarrayList.size()も小さくなって、必要な回数ループしなくなるという大馬鹿なことをしたのでした。(笑)
これに気づくまでに丸一日以上かかったというトンでもない私でした。

さて、そこでループを書き直そうとしたのですが、ふと最近の勉強の成果を思いだし、ここはスタックを使って書くところなのではないかと思い至りました。
そこで、
while(arrayList.size() >= num){
arrayList.removeLast(); // スタックでデータを後方から削除
}
と、書き直してみました。
動かしてみると、良いみたいですが、なんだか本当に正解になっているか不安です。(笑)

それにしても、どうしてこう頭が悪いのか、と。
かつてビル・ゲイツはポール・アレンと共に不眠不休の作業を行い、8週間でBasicを作り、ポール・アレンはその納品(?)の途中でブートローダを作り忘れていたことに気づいて飛行機の中で(※)それを作ってしまったそうですが(以上Wikipediaより)、そういうのって僕には宇宙人としか思えません。
SF作家のウィリアム・ギブスンはサイバー・パンクの魁となった「ニューロマンサー」を発表したところ、多くのハッカーから、「こいつはプログラミングを何も知らない」と叩かれたそうですが、ガンダムには戦闘中に乗機のOSを書き換えてしまう主人公がいるとか(爆笑。どんなにゆっくりとした戦いなんだ)。
そこまで行かなくても、目を閉じても鼻歌交じりでコードが書けるようになれたらなあ、と思います。
きっと、天才ハッカーと呼ばれるレベルの人はピアノでも奏でるようにコードを打ち込むんでしょうね。見てみたい。

※MS誕生前という時代でノートパソコンと呼べるものもなかったのではないかと思いますが、どうやって飛行機の中で作ったのでしょうか?

posted by 白虹 at 00:53| Comment(0) | TrackBack(0) | Android開発