2016-07-14 11 views
2

私はこの問題を解決しました。何らかの理由で、なぜこれが今日働いていないのか分かりません。ループが範囲外になった

for(int i = 0; i < _positions.Count; i+=3) { 
    Vector3 v0 = _positions[i + 0]; 
    Vector3 v1 = _positions[i + 1]; 
    Vector3 v2 = _positions[i + 2]; 
    [...] 
} 

を、これが機能していません。

だから私の問題は、私はこれを実行しようとしています。 _postionsはVector3のリストで、vector3は3つの浮動小数点数を持つ構造体です。事は、私はこれが

for (var i = 0; i < _indices.Count; i += 3) { 
    int i0 = _indices[i].Value; 
    int i1 = _indices[i + 1].Value; 
    int i2 = _indices[i + 2].Value; 
} 

と_indicesを仕事を得ることができるということです

List<int?> 
+1

あなたのループに_position.Countを見ている、しかし、あなたは、体内_positionsを使用しています。カウントが3で割り切れる限り、あなたはうまくいくはずですが、それに応えなければなりません。 – ManoDestra

+0

'_positions.Count'は' _position.Count'ではなく(複数に注意してください)。 – Jeeped

+0

あなたは何を言っているのは、ほとんどの運が_indices働いているということですか? – Swiftprog

答えて

5

であるあなたのループコードは罰金ですが、あるとすれば、それは、問題の配列が3で割り切れることを前提としてい残りの1または2の残りの部分は、配列の限界を超えて要素にアクセスしようとします。

など。 10個の要素の配列を持っていれば、ループを3回繰り返しますが、最後に処理する要素が10個ありますが、12番目の要素は存在しないため、試行すると爆弾になりますコードがその存在を前提としているので、これらの要素にアクセスします。

実行前に配列を3で割り切れるかどうか、またはコードが常にコード内にあることを確認することをテストします。

if (_positions.Count % 3 == 0) 
{ 
    // Processing here e.g. ... 
    for (int i = 0; i < _positions.Count; i+=3) { 
     Vector3 v0 = _positions[i + 0]; 
     Vector3 v1 = _positions[i + 1]; 
     Vector3 v2 = _positions[i + 2]; 
     [...] 
    } 
} 
else 
{ 
    // Flag issue here, either on console or throw an exception... 
    Console.WriteLine("Positions array length must be divisible by 3"); 
} 

あなたが任意の残りの値(1またはそれらの2)を無視したい場合は、あなただけの3のグループの上にそのループの繰り返し処理のために確保するために、あなたのforループでカウントから3の係数を引くことができます短い残りせずに、例えば黙っ

不一致を無視して:、最初の例で

for (int i = 0; i < _positions.Count - (_positions.Count % 3); i+=3) { 
    Vector3 v0 = _positions[i + 0]; 
    Vector3 v1 = _positions[i + 1]; 
    Vector3 v2 = _positions[i + 2]; 
    [...] 
} 
関連する問題