人気ブログランキング |
2004年 12月 02日
もう数字は文字列になってくれるな
卒論をやってたんですが、謎な現象が起こったのです。


---------------------


a = new Array();  //aという配列を生成

a[0] = 20;
a[1] = 30;
a[2] = 100;

i=0;
work=0;

while (i<4) {
if (work < a[i]) {
work = a[i];
}
i++;
}

trace(work);  //workの値を出力


---------------------


C言語をかじったことがある人なら、なんてことはないwhile文。

ちょっと解説するならば「iが4より大きくなるまでwhileの中を実行する」という感じです。

whileの中に「i++;」というのがあるので、繰り返すごとにiの値は1ずつ増えます。

つまり、whileの中の命令を3回繰り返すことになります。

で、whileの中のif文。「work < a[i]」の時に、

「work」の内容を「a[i]」に書き換える…という文です。

もちろん、条件を満たさない場合は「work」は最初で宣言しているとおり、0のままです。


「a[i]」というのがわかりにくいかもしれませんが、配列です。

a[0],a[1],a[2]に、それぞれ数字が入っています。



結論としては、aの配列の中で一番大きな数値を探し、それを出力するプログラムです。



ちなみに「trace(work);」というのは、変数の値を出力します。

ただの確認用で正式なプログラムでは実行されません。

例えば、if文が一度も実行されなかった場合は「0」と表示されます。


---------------------


それでは、本題。

配列aの3つの数字ですが、どの数値が一番大きいでしょうか?


a[0]=20; a[1]=30; a[2]=100;


見ればわかりますが、a[2]です。

「100」は「20」よりも「30」よりも大きいですので。そんな事は小学生でもわかります。



でも、このプログラムを実行すると、「trace(work);」で出力されるものは

「30」になっちゃうのです。なんでやねん。



最初は「「配列」は同じ桁数同士でしか比較できないのか?」とか

適当な想像をしてたのですが、わかれば簡単なことでした。



前にもミスったことで、タイトルにも書いてるんですけど、

「数字が文字として認識」されてました。

「100」より「30」が大きいのは、一番左の桁数から文字として比較した時、

「1」<「3」と認識される為だと思われます。



もう見てる人はあんまりいない気がするんですが(自己満足)

最後に修正したプログラムソースも書いてみます。


---------------------

a = new Array();  //aという配列を生成

a[0] = 20;
a[1] = 30;
a[2] = 100;

i=0;
work=0;

while (i<4) {
if (work < parseInt(a[i],10)) {
work = parseInt(a[i],10);
}
i++;
}

trace(work);  //workの値を出力


---------------------


何個か前の「Flash」カテゴリで書いたのですが、

「parseInt」を使うことで文字列になっている数字を、正しく数値として扱えます。

こう書くことで「trace(work);」での出力は「100」となりました。



…無駄に疲れた…(;´Д`)

by riza_59 | 2004-12-02 13:13 | Flash


<< 櫛      今年は弱過ぎ >>