- ベストアンサー
おみくじスクリプトでの処理が重くなる問題
- おみくじスクリプトを作成している際に、処理が重くなり、IEでエラーが発生しています。おかしい点を教えてください。
- ランクごとに健康運や恋愛運など6つの部分がランダムで◎○△×になるおみくじスクリプトを作成していますが、処理が重くなっています。おかしい点を教えてください。
- おみくじスクリプトを作成していて、処理が重くなりIEでエラーが発生しています。おかしい点があれば教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> たしかに、おっしゃられている通り、場合によっては、永久ループですね・・・考えてませんでした。 > やはり、そこが問題でエラーがでているのでしょうか? そうですね。やはり永久ループ(に近い状態)になっていることが、直接の原因でしょう。 そしてその原因は、「空の配列であれば◎をいれ、そうでなければやり直す」というやり方にあります。 初めのうちは、配列のほとんどが空なので、ほとんど「やり直す」ことなくループは進行します。 しかし、終わりのほうになってくると、配列のほとんどはもうすでに埋まっています。つまり、終わりのほうでは必然的に「やり直す」回数が増えてくるわけです。一番最後においては、「空」はたった1個しかありませんから、乱数の値がそれになるまでかなりの回数「やり直す」ことになります。 この無駄なやり直しが、スクリプトの動作を遅くしていると思われます。
その他の回答 (1)
- UKY
- ベストアンサー率50% (604/1207)
ソートというよりこれはただのループですね。 ただ、現在のやり方はかなり非効率です。 それぞれのループの中で、 cnt -=1; というようにしてループカウンタを戻していますよね。 これだと、乱数の出方によっては永遠にループしてしまいます。 スクリプトを見ると、 ◎が w.ura 個 ○が w.urb 個 △が w.urc 個 ×が w.urd 個 というように決まっているようなので、 予め配列 utc に◎を w.ura 個、○を w.urb 個、△を w.urc 個、×を w.urd 個入れておいてから、ランダムにシャッフルするという方法がお勧めです。 (utcの長さ = i = w.ura + w.urb + w.urc + w.urd になっているんですよね?)
補足
本文にきちんと書けばよかったのですが、他の方法を探してはいないんです。 と、いうのも、いろいろな方法で試してはいるので、実際には、作成は完了しているのですが、この方法だけうまくいかなかったので、この方法での問題点がしりたかったのです。 たしかに、おっしゃられている通り、場合によっては、永久ループですね・・・考えてませんでした。 やはり、そこが問題でエラーがでているのでしょうか? 私自身、JSにはあまりなれておりませんので、書き方がおかしい個所でもあるのかな?って思ってたのです。
お礼
何度も、回答ありがとうございます。 プログラムが長くなったのですが、「空じゃなかったら、『 if(utc[j]==0) 』 のJを++する Jが5だったらFORを5回かまして、あいているところを順序探していく」というプログラムに変更してら、エラーは出なくなったので、「永久ループしそうなプログラム」がダメだったみたいですね。 全然気づきませんでした・・・・ 本当に、ありがとうございます。