質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1225閲覧

2重for文での処理について

kariaka2020

総合スコア37

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

1グッド

1クリップ

投稿2019/12/27 10:02

前提・実現したいこと

独学で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]まであります。

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/12/27 10:14

zahyou がちゃんと初期化されてないんじゃないですかね。
YAmaGNZ

2019/12/27 10:18

検証でどのようにzahyouの中身を確認したのでしょうか? デバッガでステップ実行するなりして、各変数の値を確認してみてはどうでしょうか
kariaka2020

2019/12/27 10:32

Zuishin様 回答ありがとうございます。 ご指摘通りzahyou[]の初期化の位置を間違えており、正しい場所に配置し直すことで解決することが出来ました。 ありがとうございました。 質問内容が初歩的過ぎるかつ、該当のソースコード外での解決となってしまい、他者の参考になりそうにないので削除依頼を出そうと思うのですが、Zuishin様に不利益な事などありますでしょうか? terateilの利用は初めてで、Yahoo知恵袋のように解決してくださった方にポイントやスコアが加算される仕組みであれば残しておこうと思うのですが…。申し訳ありません。
kariaka2020

2019/12/27 10:35

YAmaGNZ様 回答ありがとうございます。 既に問題は解決し、原因はこちらの初歩的なミスでした。 確認方法についても教えていただきありがとうございました。
guest

回答1

0

自己解決

zahyou[]を初期化する位置が誤って「該当のソースコード」とは別のループの中に入ってしまっていました。
ループの対象外のところに置き直すことで解決しました。

アドバイスをくださった皆様ありがとうございました。

投稿2019/12/27 11:15

kariaka2020

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問