前提・実現したいこと
独学でC#の勉強をしています。
2重for文などの仕組みについて教えていただきたく質問させていただきました。
現在、double zahyou[35,3]で表される配列の中身を用いて座標間の距離を求めるプログラムを書こうとしています。
ここでの最終目標としては求めた距離をdistance[]に追加していき後で参照することです。
座標は35点ありそれぞれ3次元データを含んでいます。
以下の「該当のソースコード」の場合、出力が
⑥dis z1テスト,0.674383(例)の後に
⑦dis z2テスト,0.787498(例)
⑦dis z2テスト,0.758475(例)
⑦dis z2テスト,0.727385(例)
・
・
というように
⑥が1回→⑦が34回
⑥が1回→⑦が33回
⑥が1回→⑦が32回
~省略~
⑥が1回→⑦が1回
出力されると想定していたのですが、以下の「発生している問題」ような結果になってしまいました。
値がループごとにそれぞれ1度きりしか入らず 0 になってしまうのはなぜなのでしょうか。
拙い文章で申し訳ありませんがお力を貸してくださると幸いです。
よろしくお願いいたします。
発生している問題
出力が ~省略~ ⑦dis z2テスト, 0.756354928016663 ⑥dis z1テスト, 0 ⑦dis z2テスト, 0 ⑦dis z2テスト, 0 ⑦dis z2テスト, 0 ⑦dis z2テスト, 0.756354928016663 ⑥dis z1テスト, 0 ⑦dis z2テスト, 0 ⑦dis z2テスト, 0 ⑦dis z2テスト, 0.756354928016663 ⑥dis z1テスト, 0 ⑦dis z2テスト, 0 ⑦dis z2テスト, 0.756354928016663 ⑥dis z1テスト, 0 ⑦dis z2テスト, 0.756354928016663 ⑥dis z1テスト, 0.756354928016663 のように数値がそれぞれ1度ずつしか入りません。
該当のソースコード
C#
1using System; 2using System.Windows; 3using System.Windows.Media; 4using System.Globalization; 5using System.Collections.Generic; 6using Microsoft.Kinect; 7using Microsoft.Kinect.Face; 8using System.Text; 9using System.Configuration; 10using System.Data; 11using System.Data.SqlClient; 12 13~~~~~~~~~~~~~~~~~~~~~~~ 14 15double[] distance = new double[595]; 16//double x1, x2, y1, y2, z1, z2; 17int d=0,g=0,h=0; 18//距離 19for (g = 0; g < 35; g++) { 20 x1 = zahyou[g, 0]; 21 y1 = zahyou[g, 1]; 22 z1 = zahyou[g, 2]; 23 Console.WriteLine(string.Join(", ", "⑥dis z1テスト", z1)); 24 for (h = g + 1; h < 35; h++) { 25 x2 = zahyou[h, 0]; 26 y2 = zahyou[h, 1]; 27 z2 = zahyou[h, 2]; 28 Console.WriteLine(string.Join(", ", "⑦dis z2テスト", z2)); 29 distance[d] = distanceuuu(x1, x2, y1, y2, z1, z2);//distanceuuuは距離を求める関数 30 d++; 31 } 32} 33// Console.WriteLine(string.Join(", ", "⑥distanceテスト", distance[300]));
試したこと
zahyou[]の中身がnullになるタイミングがあるのかと思い、別で実行し確認しましたが
⑥zahyouテスト, 0.0674647763371468
⑥zahyouテスト, 0.0667360574007034
⑥zahyouテスト, 0.0664628222584724
⑥zahyouテスト, 0.0663724541664124
・
・
というように常時 値が入っていました。
補足情報(FW/ツールのバージョンなど)
visual studio2017
座標は
zahyou[33, 0] = vertex.X;
zahyou[33, 1] = vertex.Y;
zahyou[33, 2] = vertex.Z;
のように代入しており、
zahyou[0,0]からzahyou[34,2]まであります。
回答1件
あなたの回答
tips
プレビュー