3個ごとに色を変えて「★」を表示



0   名前: うひょ : 2006/06/22(木) 16:53  [URL]  ID:Y1L64jC2
変数oに入っている数の星を表示するのですが、デザインの都合上その数だけ星を表示するわけにはいきませんので、3つごとに星の色を変えるようにしたいのです。
starcolorに色の順番が入っています。
しかし、下のソースでやってみると星が1個も表示されないときがあります。
どうしたらうまく表示できるでしょうか…。

starcolor = ['yellow','aqua','blue','lime','green','red','purple'];
o = 5;
w = Math.floor(o/3);
if(starcolor[w]){
	insob+="<td style=\"color:"+starcolor[w]+"\">";
	for(var u=0;u<(o%3);u++)insob+="★";
}else insob+="<td style=\"color:yellow\">★×"+o;
insob+="</td>";

1   名前: underStone : 2006/06/22(木) 16:53
なにを意図しているのかイマイチ不明。もしかして、
w = Math.floor(Math.random() * atarcolor*length) 

みたいなこと?

2   名前: miz : 2006/06/22(木) 16:53  ID:f9cY3mpy
一行も出力されない理由
>for(var u=0;u<(o%3);u++)insob+="★";
oが3の倍数の時 o%3 は0 よって初期値で既に u<(o%3) の条件からはずれているので
insob+="★";は実行されません
さらにo<=18の時は、else文は実行されません

>デザインの都合上その数だけ星を表示するわけにはいきませんので、3つごとに星の色を変えるようにしたい

文章の前半と後半とがうまくかみ合ってません。
o個の★を3個おきに色変更したいのか(3つの緑、3つの青、3つの水色、2個の黄色)
1/3+α個に減らしたいのか、
それとも6個を一つの青の★に、さらに3個あれば1つの水色の★にという具合に置換したいのでしょうか?
3の倍数って全体の数量が判断しにくくなりませんか?
oの最大値はいくつくらいなのでしょう?
せいぜいが一個用と5個用と10個用の3色表示くらいが、見た目も数えやすいですけどねぇ?
例えば、o=37 のとき
青色★★★ 水色★ 黄色★★
青=X 水色=V 黄色=Iと考えればローマ数字表記のように個数判断しやすい。

どのようにしたいのかもう少し具体的に記述してみて下さい。

3   名前: うひょ : 2006/06/22(木) 16:53  [URL]  ID:Y1L64jC2
すみません。
わかりづらかったですね。
たとえば、
o=1〜3なら黄色の★を1〜3つ、
o=4〜6なら水色の★を1〜3つ、
o=7〜9なら青色の★を1〜3つ、
o=10〜12なら黄緑の★を1〜3つ、
o=13〜15なら緑の★を1〜3つ、
o=16〜18なら紫の★を1〜3つ
といった具合です。
最後のelseは、上の指定方法ではo>18のときに色を決められないので、
その場合は黄色で「★×(oの値)」と表示したいのです。

4   名前: うひょ : 2006/06/22(木) 16:53  [URL]  ID:Y1L64jC2
解決しました!
↓のソースでできました。
starcolor = ['yellow','aqua','blue','lime','green','red','purple'];
o=5;
t=o;
t %= 3;
var w = Math.floor(o/3-(!t?1:0));
a += "<td style=\"color:" + (starcolor[w]?starcolor[w]:'yellow') + "\">";
if(!t)t=3;
if(starcolor[w])for(var m=0;m<t;m++)insob+="★";
else insob+="★×"+o;
insob += "</td>";

一覧へ戻る