【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】

下記のようにテストしてみてるのですが、何故か数字が足し算されず文字列として認識しているようです。
Total[21]がないのですが、これは関係あるのでしょうか
そしてTotal[21]を省く形で足し算をしてみてるのですが、合ってますでしょうか。先輩方のお知恵をお借り出来ましたら幸いです。
お願い致します。

Total = new Array();
Total[0]='0';
Total[1] = '16';
Total[2] = '16';
Total[3] = '16';
Total[4] = '16';
Total[5] = '16';
Total[6] = '16';
Total[7] = '16';
Total[8] = '16';
Total[9] = '16';
Total[10] = '16';
Total[11] = '16';
Total[12] = '16';
Total[13] = '16';
Total[14] = '16';
Total[15] = '16';
Total[16] = '16';
Total[17] = '16';
Total[18] = '16';
Total[19] = '16';
Total[20] = '16';
Total[22] = '16';
Total[23] = '16';
Total[24] = '16';
Total[25] = '16';
Total[26] = '16';
Total[27] = '29';
Total[28] = '17';

var total = '0';
for(i=1;i<=20;i++){
total = total + parseInt(Total[i]);
}
for(i=22;i<=28;i++){
total = total + parseInt(Total[i]);
}
document.write("+ total +");

A 回答 (4件)

・数としてあつかうならクォーテーションでくくらない


・数をたしていくなら+=演算子をつかう
・文字列変換はparseInt
・配列のすべてのデータをひろうならfor in構文をつかう

以上から

<script>
Total = new Array();
Total[0]='0';
Total[1] = '16';
Total[2] = '16';
Total[3] = '16';
Total[4] = '16';
Total[5] = '16';
Total[6] = '16';
Total[7] = '16';
Total[8] = '16';
Total[9] = '16';
Total[10] = '16';
Total[11] = '16';
Total[12] = '16';
Total[13] = '16';
Total[14] = '16';
Total[15] = '16';
Total[16] = '16';
Total[17] = '16';
Total[18] = '16';
Total[19] = '16';
Total[20] = '16';
Total[22] = '16';
Total[23] = '16';
Total[24] = '16';
Total[25] = '16';
Total[26] = '16';
Total[27] = '29';
Total[28] = '17';
var total=0;
for(var i in Total){
total +=parseInt(Total[i]);
}
document.write(total);

</script>
    • good
    • 0
この回答へのお礼

数字として扱うならクオーテーションで括っては駄目なんですね。
+=演算子を使った方が良さそうですね。
for in文で配列全てのデータを拾える方法までご教授頂きありがとうございます。

これですと気にせず拾ってくれるのは便利ですね。

有難う御座いました。

お礼日時:2008/03/11 15:53

このような場合は、eval() という関数を使います。



試してませんが、以下でよいのではないでしょうか。

total = eval( total + parseInt(Total[i]) );
    • good
    • 0

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "

http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dt …
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Q3843076 TestCase 1</title>
<script type="text/javascript">
//<![CDATA[
function init(){
Total = new Array();
Total[0]='0';
Total[1] = '16';
Total[2] = '16';
Total[3] = '16';
Total[4] = '16';
Total[5] = '16';
Total[6] = '16';
Total[7] = '16';
Total[8] = '16';
Total[9] = '16';
Total[10] = '16';
Total[11] = '16';
Total[12] = '16';
Total[13] = '16';
Total[14] = '16';
Total[15] = '16';
Total[16] = '16';
Total[17] = '16';
Total[18] = '16';
Total[19] = '16';
Total[20] = '16';
Total[22] = '16';
Total[23] = '16';
Total[24] = '16';
Total[25] = '16';
Total[26] = '16';
Total[27] = '29';
Total[28] = '17';

//var total = '0';
// totalは0という文字列

var total = 0;
//totalは0という数値


//文字列と文字列以外の間では+は文字列連結演算子。
//数字と数字の時は算術演算子。

for(i=1;i<=20;i++){
total = total + parseInt(Total[i]);
}
for(i=22;i<=28;i++){
total = total + parseInt(Total[i]);
}

//alert("+ total +");
//document.write(total.toString())の間違いじゃね?;
//俺はdocument.write嫌いなのでalertをする。

alert(total.toString());


}
//]]>
</script>
</head>
<body onload="init();">
</body>
</html>
    • good
    • 0
この回答へのお礼

toString()関数で実行結果を取得できるんですか。
まだまだ初歩的な所でつまずいてる感じなのですが、良い勉強になりました。
またalertの使い方の実例としても大変参考になります。
簡単なhtml文に掲載頂き有難う御座いました。

お礼日時:2008/03/11 15:47

<html><body>


<script>
//1個ずつ代入するよりまとめてみてみては?
var Total = [ 1,2,3,4,5,6,7,8,9,10 ];
//Totalの代入個数は Total.length で調べられるよ!

//Totalとtotalは区別されているけど紛らわしいのでは?
var total = 0;

//以下繰り返し加算
for(var i=0;i<Total.length;i++) total+=Total[i];

document.write("TOTAL="+total);
</script>
</body></html>
    • good
    • 0
この回答へのお礼

lengthで個数調べられるんですか。

それをfor文で使うという事でとても参考になる事例を有難う御座います。

お礼日時:2008/03/11 16:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!