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

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

新規登録して質問してみよう
ただいま回答率
85.46%
C#

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

Q&A

解決済

2回答

2640閲覧

C# 2次元配列 ループ 基礎

yakumo02

総合スコア103

C#

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

0グッド

0クリップ

投稿2020/04/16 02:37

編集2020/04/16 03:27

C#の2次元配列のループ処理を勉強しているのですが、以下のコードの出力結果がなぜそうなるのかが理解できません
ご教授お願いします。
paiza
C#入門編5: 多次元配列を理解しよう より
https://paiza.jp/works/cs/primer/beginner-cs5/9704

自分は出力結果は
0 1 2
0 1 2
0 1 2
0 1 2
になるのではないかと思っています。

iは要素数だけ処理を繰り返すものだと思っています。
この場合teamsの中は要素が4つあるのでループを4回繰り返す

jの繰り返す条件は、 j<teams[i].Length;なので、{}の中の要素の数だけ処理を繰り返す
この場合は3回繰り返すのでjの出力結果は 0 1 2 になると思っています。

Console.Write(i);をコメントアウトして、Console.Write(j);だけを出力すると自分の仮説通りの出力結果になるのですが、iも出力すると以下の出力結果になるのが理解できません。
なぜ1回のループが終わるごとに数が10ずつ増えているのでしょうか?

// 2次元配列をループで処理する using System; public class Lesson05 { public static void Main() { string[][] teams = { new string[] {"勇者", "戦士", "魔法使い"}, new string[] {"盗賊", "忍者", "商人"}, new string[] {"スライム", "ドラゴン", "魔王"}, new string[] {"踊り子", "僧侶", "アーチャー"} }; for (int i=0;i<teams.Length;i++) { for (int j =0; j<teams[i].Length;j++) { Console.Write(i); Console.Write(j); Console.Write(" "); } Console.WriteLine(); } } }

出力結果
00 01 02
10 11 12
20 21 22
30 31 32

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

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

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

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

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

Zuishin

2020/04/16 02:41

コードの出典は必ず書いてください。
dodox86

2020/04/16 02:42

デバッガー(Visual Studio)は使っていないのでしょうか。デバッグで一行一行追っていけば(<トレース)分かると思うのですが。
yakumo02

2020/04/16 03:03

すみません、paizaの C#入門編5: 多次元配列を理解しよう のコードになります。
Zuishin

2020/04/16 03:06

質問を編集し、リンクを張ってください。
Zuishin

2020/04/16 03:12

どのようにわからないんでしょうか? 数字が出るはずがないということですか? それとも Write と WriteLine の違いですか? それとも二重ループそのものですか? またはジャグ配列の概念ですか?
yakumo02

2020/04/16 03:25

申し訳ありません。 理解できない内容を追加しました。
Zuishin

2020/04/16 03:34

i が 0 j が 1 この場合、i と j を続けて出力すると、01 になります。これは大丈夫ですか?
yakumo02

2020/04/16 03:47 編集

すみません、理解してませんでした 出力結果はこういうことでしたか ありがとうございます! [I][J] [I][J] [I][J] [I][J] [I][J] [I][J] [I][J] [I][J] [I][J] [I][J] [I][J] [I][J]
Zuishin

2020/04/16 03:53

他の人がこの欄を見なくても理解できるよう整理して回答し、自分の回答をベストアンサーに選んでください。
Zuishin

2020/04/16 03:59

それと、dodox86 さんがおっしゃったように、デバッガーの使い方を学んでください。 インデントの崩れを見ると、単なるテキストエディタを使っているようですが、そういう人はいつまで経ってもプログラミングがうまくなりません。これは経験則です。
yakumo02

2020/04/16 04:03

承知いたしました Zuishin dodox86 さん ご教授ありがとうございました
guest

回答2

0

自己解決

出力結果は
[I][J] [I][J] [I][J]
[I][J] [I][J] [I][J]
[I][J] [I][J] [I][J]
[I][J] [I][J] [I][J]

となっている
[i][j]と横並びになっているのはWtiteLineメソッドではなくWriteメソッドのため

iはteams配列の要素数だけ繰り返すのでループを4回繰り返す

jは j<teams[i].Length;なので、{}の中の要素の数だけ処理を繰り返す

2次元配列なのでjの全ての実行が終わるまでiは複数回実行されない よって一回のループでiは同じ数字になる

投稿2020/04/16 04:48

編集2020/04/16 07:54
yakumo02

総合スコア103

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

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

0

WriteとWrireLineの違いを調べてみましょう。
ステップ実行で、何が表示されるかも、確認しましょう。

コメントで解決しているとは...

投稿2020/04/16 04:43

編集2020/04/16 04:46
Q71

総合スコア995

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問