ActionScript初心者のための配列の足し算方法とは?

このQ&Aのポイント
  • ActionScript初心者が配列の要素を足し合わせる方法について疑問を持っています。
  • 練習問題で与えられた配列の要素を足し合わせる処理を書いたのですが、意図した結果が得られません。
  • コードを確認したのですが、どこが間違っているのかわかりません。正しい配列の要素の足し合わせ方を教えてください。
回答を見る
  • ベストアンサー

ActionScriptについて

今、ActionScriptのトレーニングブックで練習している初心者です。 練習問題で、配列の34, 40, 12, 30, 24, 55, 70, 60, 52, 43, 65, 30, 45, 20, 15を全て足したいのですが、 出力すると、 「すべての予約済み座席数は014131211109876543210人です」 と出てきてしまいます。(595と出てくるはずだと思うんです) 本の通りに記述してみたはずなのですが、どこか変なのでしょうか? var reserved_array = [34, 40, 12, 30, 24, 55, 70, 60, 52, 43, 65, 30, 45, 20, 15]; var total_num = 0; for (var i in reserved_array) { total_num += i; } trace("すべての予約済み座席数は"+total_num+"人です");

  • Flash
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • wynnjp
  • ベストアンサー率71% (5/7)
回答No.1

今回の記述には2カ所修正する点があります。 まず1つ目ですが、 for (var i in reserved_array) { の部分を for(var i:Number in reserved_array) { と型指定で書いてみてください。 実行しようとしたらエラーになりますよね? iには文字列(String)型が入っていますので、足し算をすると単純に文字列として結合されます。 0+14+13+12+11+10+・・・の結果の文字列になっていますよね。 2つ目ですが、iには「いくつ目」という結果が入ります。 なので、14個目、13個目ということで、14、13と足されているのですね。 欲しいのは、reserved_arrayのいくつ目という中身ですので、以下のような感じになります。 var total_num = 0; for (var i:String in reserved_array) {  total_num += reserved_array(i); } trace("すべての予約済み座席数は"+total_num+"人です"); 手元に環境がないのでミスがあるかもしれませんが、上記のような感じで取得したい内容を得られると思います。 ※これでも、文字列として足されるようなら、parseInt(reserved_array(i))と明示的に数字に直してみるとうまくいくと思います。

parakeet-1
質問者

お礼

wynnjp様 ありがとうございます。 試してみたら、ちゃんとできました。 まだ勉強はじめたばかりで、やや混乱しておりますが、がんばります。 助かりましたm(__)m

その他の回答 (1)

  • wynnjp
  • ベストアンサー率71% (5/7)
回答No.2

すみません、ふと見直したら初歩的な間違いがありました。 誤)total_num += reserved_array(i); 正)total_num += reserved_array[i]; です。

関連するQ&A

  • ActionScriptで配列をクリアする方法を教えてください。

    ActionScriptで、オブジェクトを格納した配列をクリアする正しい方法を教えてください。 具体的には、 ・new Array() で配列を生成する。 ・new Object() で生成したオブジェクトを配列に格納する。 ・配列の中身を処理したあと、配列を一度クリアする。 ・配列に別のオブジェクトを格納する。 ような処理をしたいのですが、メモリリークを起こさずに配列をクリアするにはどうしたらいいでしょうか? 例えば、イメージはこんな感じです。(意味のないコードですが) // 配列の生成 var arr = new Array(); // 配列にオブジェクトを格納 for (var i = 0; i < 5; i++) { var obj = new Object(); obj.num = i; } // 配列のクリア arr.length = 0; // クリアした配列に別のオブジェクトを格納 for (var i = 0; i < 5; i++) { var obj = new Object(); obj.num = i * 2; } 上記のコードで、arr.length = 0; で配列をクリアしていますが、これで配列に格納されたオブジェクトが確保したメモリがすべて解放されるでしょうか? あるいは、配列の内容がなくなるまで pop() 等で取り出す等の処理をする必要があるでしょうか? 以上よろしくお願いします。

    • ベストアンサー
    • Flash
  • ActionScriptでクラスの配列

    ActionScript3をちょっと触っているのですが、 Stringや独自クラスの配列の変数を宣言する 事は出来ないのでしょうか? var str[]:String; みたいな。 Array()を介さないとダメなのでしょうか? とすると、Array()の中が必ずStringだけとは 限らない状況に陥りそうな気がするのですが・・・。 実現方法をご教示下さい。

    • ベストアンサー
    • Flash
  • flashliteでランダム(シャッフル)を作りたい。

    いつもお世話になります。今回ご質問させて頂く内容はFlashlite1.0で、1~10までの数字をランダムかつ同じ数字がかぶらないように表示する方法(シャッフル)です。Flashlite2.0からは配列が使え、考えればシャッフルする方法もあったのですが、1.0ですと配列が使えない為やり方がわかりません。FlashのASは経験あるのですが、Flashliteの知識や経験があまりなく困っております。どなたかお教え頂けたらと思います。 具体的な内容なのですが、今作ったスクリプトが以下です。iという文字にsetを使い擬似配列(?)を組みarray0~array9という変数をランダムな数字で表すといったスクリプトを組んだのですが、これだとランダムなので同じ数字が何回も出てきてしまいます。これを同じ数字は省いてダブる数字が無いようにしたいと思っています。 ▼スクリプト▼ num = 10; for(i = 0;i < num;i++){ set("array" add i,random(10)); } // 確認用 trace(array0); trace(array1); trace(array2); trace(array3); trace(array4); trace(array5); trace(array6); trace(array7); trace(array8); trace(array9); お手数お掛けして申し訳ありません。どなたかお教え頂ける方がいらっしゃいましたらよろしく御願い致します。 制作環境はAdobe Flash CS3です。

    • ベストアンサー
    • Flash
  • 空の配列を示す方法

    Flash8を使用して、ActionScript2を書いています。 if文を用いて、「変数my_array(配列)が空の配列でない場合は~」 という条件分岐を書きたいのですが、 空の配列を示す方法がわかりません。 var my_array:Array = new Array(); とした上で、 if (my_array == null) { trace("null"); } else { trace("違う"); } と書いて調べてみたのですが、 nullでもundefinedでも""でも[]でも「違う」と表示されてしまいます。 「空の配列でない場合」という条件を書く方法はあるでしょうか?

    • ベストアンサー
    • Flash
  • フレームに配置したムービークリップを配列に格納

    ActionScript3.0を使っています。よろしくお願いします。 動的にインスタンスを生成して配列に格納する方法は すでに取得しているのですが、 フレームに配置したインスタンスを配列に格納する方法がわかりません。 配置したインスタンス名は連番になっており、 数が多いため下記のようにループさせて配列に格納したいと思います。 現在のコードは下記のとおりです。 var mapBtMcArr:Array = new Array(); for(var i:int=1; i<9; i++) { var mapBtStr:String = "r_machi01_"+ i; var mapBt:MovieClip = mapBtStr; mapBtMcArr.push(mapBt); trace(mapBtMcArr); } これだと、型Stringの値が関連しない型…というエラーが表示されてしまいます。 スクリプトを書く上での基本だと思いますが、 ご伝授いただければ幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • actionscriptで、変数に変数を使いたい場合

    お世話になります、actionscript初心者です phpでは以下のようにすれば変数に変数の使用が出来ますが --- function test ($num){ $pops{$num} = "aaa"; print ($pops15); } test("15"); // aaaと表示される actionscriptで変数に変数を使いたい場合 どのように記述すれば良いのでしょうか? 以下のようなsampleを組みましたが出来ませんでした --- function test (Num){ var Pops[Num] = "aaa"; trace(Pops[15]); } play_button.onRelease = function (){ test(15); // シンタックスエラーになってしまう } 変数に変数を使用 actionscript など、もろもろで検索したり 人が制作したactionscriptを参照しましたが、ほしい情報は出てきませんでした。 actionscriptにはphpのような変数に変数を使用できる便利な記述方法はないのでしょうか? 分かる方、お手数ですがご教授よろしくお願い致します。

    • ベストアンサー
    • Flash
  • actionscriptの配列について

    antionscript初心者ですが、配列について質問があります。 使っているソフトはadobe flash CS3 professionalです。 配列を利用する際に 入力テキストやダイナミックテキストを入れるということはできないのでしょうか? ↓入力テキストの方 Var x: Array=new Array(2); x[0]= ○○.text; x[1]= ●●.text; ↓ダイナミックテキストの方 Var y: Array=new Array(2); y[0]= □□.text; y[1]= ■■.text; そのあとボタンをクリックしたら for(var i : int =0; i<x.length; i++){ if(x[i]>=5){ y[i]="A" }else if(x<5){ y[i]="B" } } というように 入力テキストにいれられた数値に応じてダイナミックテキストに文字を表示させたいのですが、うまくいきません。初心者なので意味不明な質問になっているかもしれませんが、よろしくお願いします。

    • ベストアンサー
    • Flash
  • ActionScript3で乱数を取得しなおかつ隣とかぶらない続き

    ActionScript3で乱数を取得しなおかつ隣とかぶらない続き 以前この質問をさせてもらったのですが、http://okwave.jp/qa/q6030004.html 前回の答えを少しステップアップを目的に処理を一つの関数にすればソースがすっきりできるのではないかと思い以下のようにしてみましたが変数の値が保存されません。 (前回のページを参照:http://okwave.jp/qa/q6030004.html) function btnClickAction(aaa:int,bbb:int,ccc:int,txt:TextField,ddd:int):void { var past:int=aaa; var now:int=bbb; var nowPartner:int=ccc; var txtArea:TextField=txt; var max:int=ddd; past=now; //臨時の配列を初期化 var tmpArr:Array=new Array ; //臨時の配列の要素0~9に数を代入 for (var i:int=0; i<=max-1; i++) { tmpArr[i]=i+1; } //臨時の配列のpast要素を抜きとる tmpArr.splice(past-1,1); //臨時の配列のpartPartner要素を抜きとる for (i=0; i<=tmpArr.length-1; i++) { if (tmpArr[i]==nowPartner) { tmpArr.splice(i,1); } } //今のデータを作成 var rnd:int=Math.floor(Math.random()*tmpArr.length); now=tmpArr[rnd]; //今のデータを表示 txtArea.text=String(now); } にして btn1.addEventListener(MouseEvent.CLICK, btn1Click); function btn1Click(evt:MouseEvent):void {  btnClickAction(past1,now1,now2,txt1,10); } とするとpast1,now1,now2の値が保存されないのです、やはりこの処理は一つの関数にはできないのでしょか? ■制作環境 FlashCS4 ActionScript3

    • ベストアンサー
    • Flash
  • ActionScriptでの配列について

    var table:Array=["A1","A2"]; と配列を宣言しています。 他のレイヤーでこの配列の値を取得し onClipEvent(load){ for(i=0;i<=_root.table.length;i++){ if(_root.table[i] == "A1"){ //処理1     }else{ //処理2 } というようにその配列の値があれば処理1をなければ処理2をするプログラムを書きたいのですが・・。 rootの配列を読み込むやりかたを教えていただきたいです。 どなたかアドバイスいただけると助かります。

  • actionscript2.0で空の配列を詰めたい

    actionscript勉強中の初心者の身ですがどうかご教授下さい。 Photo1~10と名前のつけたMCを順に並べ、そのMCを押すとリムーブします。 そのリムーブしたMCの間を詰め、残ったものに順に1~また名前を振っていきたいと考えています。 例: Photo1 Photo2 Photo3→リムーブする Photo4→リムーブする Photo5 ↓ Photo1 Photo2 Photo5 ↓ 間を詰めて名前を振り直す Photo1 Photo2 Photo3(元5) これを配列を使ってやっているのですが、どうしても空の配列が出来てしまって、上手く希望通りになりません。 間を詰めるところまではたどり着いたのですが、それでも空の配列が前に詰められ、後ろに並び替えられたMCが配置されるというどうにも中途半端にしかできないでいます… 上の例でいきますと、 (空の配列) (空の配列) Photo1 Photo2 Photo5 という状態です。 この空白の配列を詰めて、Photo1~順に名前を振り直していきたいと思っています。 今後どんな風にスクリプトを書けばいいのか、もしくはもしこの方法では希望の動きが出来ないようであれば、どう変えればいいのかをどうか教えて頂きたいです。 分かりづらいとは思いますが、何卒よろしくお願いいたします。 var clip_addr:MovieClip = _root; var list:Array = new Array(); //2段にMC"Photo1~10"を順々に並べていく objA = new Array(2*5); D = 1; sy = 40; for (y=0; y<2; y++) { sx = 40; for (x=0; x<5; x++) { objA[D] = _root.attachMovie("Photo"+D, "Photo"+D, D+100); objA[D]._x = sx; objA[D]._y = sy; D++; sx += 100; } sy += 100; } //リストにrefを記録 //MCを押すとリムーブする for (i=1; i<=10; i++) { ref = clip_addr["Photo"+i]; list[i] = {clip:ref}; ref.onPress = function() { this.removeMovieClip(); }; } //naraというMCを押すと消された番号を詰めて並び変わる(並び変わる場所はテスト段階なので適当に配置) nara.onPress = function() { for (i=1; i<=10; i++) { list.sortOn("clip",Array.NUMERIC); trace(list[i].clip) mog = list[i].clip mog._x = 100*i; mog._y = 10*i; } }; ↑最終的に上の処理にリネームの要素を加えていきたいと考えています。

専門家に質問してみよう