AS3.0コードの違いとは?

このQ&Aのポイント
  • AS3.0のコードの違いを説明します。
  • コードの違いにより、取得できる値に違いが生じます。
  • 値を取得できる理由についても説明します。
回答を見る
  • ベストアンサー

AS3.0ですが、下記2つのコードの違いがわかりません。。

AS3.0ですが、下記2つのコードの違いがわかりません。。 ↓こちらのコードは undefined になるのですが、 --------------------------------- var box:Array = new Array(); for(var j=0; j<1; j++){ for(var i=0; i<10; i++){ box[j] = new Array(); box[j][i] = i+j; } } trace(box[0][0]); ----------------------------------- ↓こちらのコードは値をとることが出来ます。 ----------------------------------- var box:Array = new Array(); for(var k=0; k<10; k++){ box[k] = new Array(); } for(var j=0; j<1; j++){ for(var i=0; i<10; i++){ box[j][i] = i+j; } } trace(box[0][1]); ----------------------------------- どういう理由で、値が取れるのでしょうか? よろしくお願いいたします。

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

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

> つまり、配列の宣言と値の代入は > 分けて書くしかないのでしょうか? 普通に次のようにすれば良いと思います。 -------------------------------- var box:Array = new Array(); for (var j=0; j<1; j++) { box[j] = new Array(); for (var i=0; i<10; i++) { box[j][i] = i + j; } } trace(box[0][1]); --------------------------------  

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

ループをアンロールして考えると分かりやすいかも。 最初のコードはこんな動きをする: box[0]=new Array; box[0][0]=0; box[0]=new Array; box[0][1]=1; box[0]=new Array; box[0][2]=2; 次のコードは以下の動きをします: box[0]=new Array;box[1]=new Array;box[2]=new Array; box[0][0]=0; box[0][1]=1; box[0][2]=2; なので前のがundefになるのは確定的にあきらか。

参考URL:
http://yougo.ascii.jp/caltar/%E3%83%AB%E3%83%BC%E3%83%97%E3%82%A2%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0
reggaepunc
質問者

補足

なんとなくわかる気がしますが。。 つまり、配列の宣言と値の代入は分けて書くしかないのでしょうか?

関連するQ&A

  • 下記コードですが、なぜtrace出来ないか、わかりますか?

    下記コードですが、なぜtrace出来ないか、わかりますか? ----------------------------------------------------------------------- var bmpData:BitmapData = new BitmapData(100,100,true,0xff000000); var bmp:Bitmap = new Bitmap(bmpData,PixelSnapping.AUTO,true); addChild(bmp); bmp.addEventListener(MouseEvent.CLICK,hoge); function hoge(e){ trace('なぜか無反応!'); } ----------------------------------------------------------------------- よろしくお願いします。

    • ベストアンサー
    • Flash
  • 重複しない乱数を作り配列に入れる(AS3.0)

    Flash Pro CS5 AS3.0 で記述しています。 1~10の整数をランダムかつ重複せずに配列に格納したいと考えています。 そこで,ネット上で参考になるソースを見つけ, 以下のように書き直しました。 var int_a = new Array(); var int_b = new Array(); function RandomInt():void{ //ここだけ変更すればよい var maxN:Number = 10;//乱数の最大値 //0~maxNの数字を全部配列に入れる for (var i:int=0; i< maxN; i++) { int_a[i] = i+1; } var j:Number = 0; var a_length:Number = int_a.length; //要は配列をシャッフルする while (a_length) { var int_r:Number = Math.floor(Math.random()*(maxN+1-j)); //乱発生した整数を配列int_bに順番に入れ、int_aから削除する int_b[j] = int_a.splice(int_r, 1); j++; //配列int_a内の数字が一つずつ減っていく a_length = int_a.length; } //ここで配列int_bがシャッフルされた trace(int_b); } RandomInt(); としました。 しかし出力結果がなぜか 8,2,4,9,,7,6,5,10,3,1のように抜けている部分があり, 次のフレームで for(var j:int=1; j <= 10; j++){   trace(int_b[j]); } として確認してもやはり 2 4 9 7 6 5 10 3 1 となってしまします。 どの部分がおかしいのか教えていただきたいです。 また,乱数発生の部分で Math.floor(Math.random()*(maxN+1-j)); という風に記述してあったのですが,ここは間違いではないのでしょうか? jを引いていくと発生する乱数の範囲が徐々に狭くなっていってしまうと思ったのですが; それとも元のソースコードを使って ttp://www.renowan.com/blog/?p=143 0~9までの乱数を発生させてそれぞれに1を足す方が簡単でしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • Objectの1番目の値がundefinedに

    AS3にてPHPに値を渡して、処理した結果をFLASH側に戻す処理をしています。 今回はテスト用に、値は送らずに単純に結果を返すだけのPHPを作ったのですが、1番目の値がundefinedになってしまいます。 for inで取得すると正常にすべての値が取得できるのですが、直接参照するとダメです。2番目以降の値は取得できます。 このような現象について、お心当たりございましたら、是非お願い致します。 ●flash側 import ConnectPHP; //PHPとの受け渡しを行う外部AS var connectPHP = new ConnectPHP(); connectPHP.addEventListener(ConnectPHP.COMPLETE, completeHandler); connectPHP.sendAndLoad("check.php"); function completeHandler(e:Event):void { var obj:Object = connectPHP.result; for (var i in obj) { trace(i, '=>', obj[i]); } trace(obj.a); trace(obj.b); } ●PHP側 <?php echo "a=1&b=2"; ?> ●結果 a => 1 b => 2 undefined 2 ※for のtrace結果の時に、空の2行が書き出されます。

    • ベストアンサー
    • Flash
  • javascriptの2次元配列をソートの仕方

    function word_grouping(data) { var code = data; //先頭についている”code="を除去 code = code.replace("code=",""); var = code.split(","); var alpha =new Array(); alpha = ['A','B','C','D','E','F','G','H','I','J','K','L','M']; //2次元配列作成 var array = new Array(); for (i =0; i < alpha.length; i++) { array[i] = [' ','0']: } //グループ名を格納 for( i = 0; i <alpha.length; i++){ array[i][0] = alpha[i] //0番目の項目から順番にグループごとに分ける for( i = 0; i < sp.length; i++){ group = sp[i].substring(0.1); //どのグループに所属しているか調べる for( j = 0; j < alpha.length; j++){ //一致したグループの配列にカウント+1していく if(group == array[j][0]{ array[j][1]++; } } } メモ ・spにはグループのどこかに所属する20個のキーワードが入っていてそれをグループに振り分けている ・グループ分けには”A001”のAだけみて振り分けています したいこと ・arrayに入ったキーワードの数を降順で並び替えたい 分からない所 ・2次元配列をsortする仕方 こんな感じなんです わかる方回答お願いします。

  • AS3.0で複数のButtonコンポーネントを動的に作成する方法

    こんにちは。 FLASH CS3&AS3.0、WIN XPの環境にて、 AS3.0で複数のButtonコンポーネントを動的に作成する方法を勉強中なのですが、var aButton[i]の所で当然ながらエラーが出てしまい、 どの様に記載すればよいのか、戸惑っております。 大変お手数をお掛けしますが、ご教授頂けると幸いです。 どうぞ宜しくお願い致します。 /* ==================================== */ import fl.controls.Button; var btn_names_array:Array = new Array("1", "2", "3", "4", "5") btn_max = length.btn_names_array; for(i=1;i<btn_max;i++){ var aButton[i]:Button = new Button(); addChild(aButton[i]); aButton[i].label = btn_names_array[i]; aButton[i].toggle = true; aButton[i].emphasized = true; aButton[i].move(10, 10+30); var format[i]:TextFormat = new TextFormat(); format[i].size = 15; aButton[i].setStyle("textFormat", format[i]); aButton[i].addEventListener(MouseEvent.CLICK, clickHandler[i]); function clickHandler[i](event:MouseEvent):void { trace("Event type "+[i]+":" + event.type); } }

    • ベストアンサー
    • Flash
  • AS2の配列の基本がわかりません

    AS2の初歩的な質問です。 配列の扱い方がよくわからないのですが、以下のコードを書きました。 var cou; for( n=0; n<10; n++){ cou[n] = n; trace("cou[" + n + "] = " + cou[n]); } 出力すると cou[0] = undefined cou[1] = undefined cou[2] = undefined cou[3] = undefined cou[4] = undefined cou[5] = undefined cou[6] = undefined cou[7] = undefined cou[8] = undefined cou[9] = undefined となってしまいます。 数値が入っているはずなのですが、 どうしてundefinedになるのでしょうか? 自分としては以下のようになってほしいのですが。。 cou[0] = 0 cou[1] = 1 cou[2] = 2 cou[3] = 3 cou[4] = 4 cou[5] = 5 cou[6] = 6 cou[7] = 7 cou[8] = 8 cou[9] = 9 ------------------------ ご存知の方いらっしゃいましたら なにとぞご教授よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • AS2.0からAS3.0にうまく変換できません。

    AS2.0からAS3.0にうまく変換できません。 はじめまして、ActionScriptを勉強し始めたばかりの初心者です。 http://blog.bonkura.jp/2008/07/flash-4.html のページのスクリプトをas3.0に直そうと思って勉強しながらやってみたんですが、 どうもうまくいきません。 書いてみたコードは以下です。 だれか添削してもらえると助かります。宜しくお願いします! stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.LEFT; var bg:MovieClip = new MovieClip(); this.setChildIndex(bg, 1); var bgPic:MovieClip = new MovieClip(); this.setChildIndex(bgPic, 0); bgPattern(); function bgPattern():void{ var myMcl:Loader = new Loader(); var oListener:Object = new Object(); var UrL:URLRequest = new URLRequest(); UrL.url = "http://blog.bonkura.jp/2008/07/08/swf/bg.jpg"; myMcl.addChild(oListener); myMcl.load(UrL, bgPic); oListener.addEventListener( Event.COMPLETE, StageSize); for(var i:Number=0; i<stage.width/100; i++){ for(var j:Number=0; j<stage.height/100; j++){ var bgP:String = "bg"+i+j; bg.addChild(new (getDefinitionByName(bgP))); this.setChildIndex(bgP, i+j*100); bg[bgP].x = i * 100; bg[bgP].y = j * 100; } } } var alphaFlag:Boolean = new Boolean(); alphaFlag = true; bg.addEventListener(Event.ENTER_FRAME, onENTERFrame); bg.addEventListener(Event.RESIZE, bg.resizeHandler); stage.addChild(bg); stage.addChild(bgPic); function StageSize():void{ bgPic.x = (stage.width/2) - (bgPic.width/2); bgPic.y = (stage.height/2) - (bgPic.height/2); } // イベントリスナー function onENTERFrame(event:Event) { if(alphaFlag){ this.alpha -= 5; if(this.alpha <= 0){ alphaFlag = !alphaFlag; } } else{ this.alpha += 5; if(this.alpha >= 100){ alphaFlag = !alphaFlag; } } } function resizeHandler(event:Event = null):void{ bgPattern(); };

    • ベストアンサー
    • Flash
  • JavaScriptについての質問です。

    ガウスの消去法による解の求め方をプログラムしたいのですが、上手くいかなかったので質問しました。以下のプログラムから実行はできるのですが、解が求められていませんでした。 どこを変えればきちんとできるのでしょうか、回答お願いします。 var A=[[1,-1,1],[1,2,0],[2,0,3]],b=[5,1,9]; WScript.Echo("ガウスの消去法の解:\n"+Gauss(A,b)); function Gauss(A,b) { var s,x=new Array(A.length),M=new Array(A.length); for(var i=k+1;i<A.length-1;k++) { for(var i=k+1;i<A.length;i++) { M[i]=new Array(A.length); M[i][k]=(A[i][k])/(A[k][k]); for(var j=k+1;j<A.length ;j++) A[i][j]=A[i][j]-(M[i][k]*A[k][j]); b[i]=b[i]-(M[i][k]*b[k]); } } for(var i=A.lengh-1;i>=0;i--) { s=0; for(var k=i+1;k<A.length;k++) s+=A[i][k]*x[k]; x[i]=(1/A[i][i])*(b[i]-s); } return x; }

  • JScriptの添削お願いします。

    連立一次方程式の解を求めるプログラムです。 下のプログラムで示した部分で2次元配列の行データの初期化をしたいのですがうまくいきません。 たぶんそこだけ間違えているだけだとは思いますが、他に間違えているところもあれば指摘お願いします。 全体的な書き直しで訂正を頂くよりも、今の状態からどこを直せばいいのか教えてもらえると勉強になります。 また、定数が3つから4つに増えた場合は、※(下記参照お願いします)にて単純に数字をコンマで区切って4つに増やせばいいのでしょうか? 例)var A=[ [1,-4,3.3], [1,-5,2.3], [1,-1,1.3], ],b=[-1,2,0.3] 他に下の方のプログラムも変えなければいけないのでしょうか? 以上質問2つありますが、片方だけでも結構ですのでよろしくお願いします。 以下がプログラムになります。 var A=[ [1,-4,3], [1,-5,2], [1,-1,1], ],b=[-1,2,0] //※ WScript.Echo("ガウスの消去法による解:"+Gauss(A,b)); function Gauss(A,b){ var s,x=new Array(A.length),M=new Array(A.length); //ガウスの消去法 for(var k=0;k<A.length-1;k++){ for(var i=k+1;i<A.length;i++){ M[i]=new Array() ; // ←ここが違うと思うのですが… M[i][k]=A[i][k]/A[k][k]; for(var j=k+1; j<A.length;j++) A[i][j]= A[i][j] - M[i][k]*A[k][j] ; b[i]=b[i]-M[i][k]*b[k]; } } //ガウスの消去法 for(var i=A.length-1;i>=0;i--){ s=0; for(var k=i+1;k<A.length;k++) s+= A[i][k]*s ; x[i]=(1/A[i][i])*(b[i]-s); } return x; }

  • フレームに配置したムービークリップを配列に格納

    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

専門家に質問してみよう