2012-03-28 9 views
0

私はロジックの非常にシンプルな作品を持っている:はAS:文が間違って評価する場合は、次のように

var divert:Number = 0; 
for (var connection in _connections) { 
    trace("target: " + _connections[connection].target + " || i: " + (i + 1)); 
    if(int(_connections[connection].target) != (i + 1)) { 
     trace("bad connection"); 
     divert++; 
    } 
} 

問題は文がtrueを返している場合i + 1int(_connections[connection].target)が等しいインクルードしているときの出力に見られるようにということですtrace()以下の文章:

target: 0 || i: 1 
bad connection 
target: 1 || i: 1 
bad connection 

これが起こる原因は誰にも分かりますか?

EDIT:これは要求に従ってに含まれている機能:すべての

public function loadListener(i:Number, onProgress:Function, onComplete:Function):Void 
    { 
     trace("load listening to: "+i); 
     trace("next in queue: " + _queues["lower"][0] + " | " + _queues["upper"][0]); 
     _functions[i] = {onProgress:onProgress, onComplete:onComplete}; 
     if (_queues["lower"][0] != i + 1 || _queues["upper"][0] != i + 1) { 
      var divert:Number = 0; 
      for (var connection in _connections) { 
       trace("target: "+_connections[connection].target+" || i: "+(i+1)); 
       if(int(_connections[connection].target) != (i + 1)) { 
        trace("bad connection"); 
        divert++; 
       } 
      } 
      if (divert == _connections.length) { 
       _diversion = i + 1; 
       trace("divert: "+divert+" || connections: "+_connections.length); 
      } 
     } 
    } 
+0

をやってみてください –

+0

@DennisJaamann 'i'は、パラメータとして関数に渡される数値としてキャストされる変数です。残りのコードは長く冗長で、この問題とはほとんど関係ありません。このコードが役立つ場合は、このコードで更新されます。 –

+0

@sch 'typeof(_connections [connection] .target)'は 'object'を返しますが、最初は数値で、if文の数値に型キャストします' int(_connections [connection] .target) 'その値は'0' –

答えて

1

まず、あなたはさらにデバッグするに

var divert:Number = 0; 
for each(var connection in _connections) { 
    trace("target: " + connection.target + " || i: " + (i + 1)); 
    if(int(connection.target) != (i + 1)) { 
     trace("bad connection"); 
     divert++; 
    } 
} 

を使用することができるときなぜ

を置き換える、 for(var)ループを使用
trace("target: " + connection.target + " || i: " + (i + 1)); 

trace("target: " + int(connection.target) + " || i: " + (i + 1)); 

これがゼロの場合は、どこに問題があるかがわかります。

あなたは、「i」があなたのコードでは、湯は、より精巧な例を示しているだろうか?とは何

if(connection.target.toString() != (i + 1).toString()) { 
+0

トレース 'int(_connections [connection] .target)'は '0'を出力します、なぜそれが' 0'に変換されるのか分かりますか?私は 'parseInt()'を使っても動作することを知りました。また、私は実際にAS2で作業していますが、「for each in」ループは使用できませんが、AS3としてタグ付けしました。なぜなら、問題をバージョンに依存しないと見ていたからです。ありがとう。 –

関連する問題