一回も披露したことのない豆知識

現在C#でプログラミング基礎から学んでいる文系のモノです。
Paizaラーニング上でC#入門編を行っており、
その中の、二次元配列の講座の部分で理解できなかった点があり質問させていただきます。

string[][] areaMap = new string[5][];
for (int i = 0; i < areaMap.Length; i++)
{
areaMap[i] = new string[10];
}

for (int i = 0; i < areaMap.Length; i++)
{
for (int j = 0; j < areaMap[i].Length; j++)
{
if(i % 2 == 0 && j % 2 == 0)
{
areaMap[i][j] = "+";
}
else
{
areaMap[i][j] = ".";
}
Console.Write(areaMap[i][j]);
}
Console.WriteLine();
}

上記のコードは、下記のドット絵を表示する処理になっております。

        +.+.+.+.+.
        . . . . . . . . . .
        +.+.+.+.+.
        . . . . . . . . . .
        +.+.+.+.+.
      


私のイメージとしては、上記のドット絵は下記のような、配列で表示されていると考えております。
               i,j
     areaMap[0] =   0,0 0,1 0,2 0,3 0,4
     areaMap[1] =   1,0 1,1 1,2 1,3 1,4
     areaMap[2] =   2,0 2,1 2,2 2,3 2,4
     areaMap[3] =   3,0 3,1 3,2 3,3 3,4
     areaMap[4] =   4,0 4,1 4,2 4,3 4,4

今回理解できなかった点が、if(i % 2 == 0 && j % 2 == 0) この処理です。
i % 2 == 0 という部分は、横の列に対して指定しているという事は理解できていますが、
j % 2 == 0 という部分が、自分の考えている処理と違う為、
なぜこう表示されているのかいまいち理解が出来ていません。

私の考えでは、if(i % 2 == 0 && j % 2 == 0)
この処理で表示されるドット絵は下記の様になると思っていました。

              ++ .. ++ .. ++
              . . . . .. .. ..
              ++ .. ++ .. ++
              . . . . .. .. ..
              ++ .. ++ .. ++      

言語化するとすれば、iの部分で偶数列が指定され、
尚且つjも偶数の部分のみ+で表示すると解釈しました。

     areaMap[0] =   0,0    0,2    0,4
     areaMap[1] =   
     areaMap[2] =   2,0    2,2    2,4  
     areaMap[3] =   
     areaMap[4] =   4,0    4,2    4,4

長文での質問で申し訳ございません。
私の考え方が間違っていると思うのですが、どなたか今一度訂正及び、
ドット絵の表記がなぜ一番初めに先述したようなドット絵になるのか、
ご教授いただければ幸いです。

A 回答 (2件)

なんかあなたの「イメージ」が変な気はする.



とはいえ

     areaMap[0] =   0,0    0,2    0,4
     areaMap[1] =   
     areaMap[2] =   2,0    2,2    2,4  
     areaMap[3] =   
     areaMap[4] =   4,0    4,2    4,4

で生き残ってるところだけ+にすると

        +.+.+.+.+.
        . . . . . . . . . .
        +.+.+.+.+.
        . . . . . . . . . .
        +.+.+.+.+.

のようになる, と思うものではないかなと感じるのだが, あなたはどうして

              ++ .. ++ .. ++
              . . . . .. .. ..
              ++ .. ++ .. ++
              . . . . .. .. ..
              ++ .. ++ .. ++      

となる, と思った?
    • good
    • 0

すみません、質問者様の「私の理解」の部分が理解できませんが、以下の解説で処理の理解の助けになればと思って書きます。



処理の考え1)
 一番外側のループが i で、その中で j が処理されます。
 つまり、値の設定は、areaMap[i][j] に代入するので、以下の順に処理されます。

 areaMap[0][0]
 areaMap[0][1]
 areaMap[0][2]
 
 ~~~~ 中略 ~~~

 areaMap[5][8]
 areaMap[5][9]

処理の考え2)
 表示も、上記の順になり、i のループの最後で改行されます。
 つまり、

 areaMap[0][0] =>+
 areaMap[0][1] =>.
 areaMap[0][2] =>+
 areaMap[0][3] =>.
 areaMap[0][4] =>+
 改行
 areaMap[1][0] =>.
 areaMap[1][1] =>.
 areaMap[1][2] =>.
 areaMap[1][3] =>.
 areaMap[1][4] =>.
 改行

 ~~~~ 中略 ~~~

 areaMap[4][3]
 areaMap[4][4]
 改行
  

という感じで、処理結果は正しいと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!