投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/3/14 06:11:56
> 下記のコードは、16回実行されるとのことですが、よくわかりかねます。

それぞれの変数の値を、順番に追っていってみましょう。

1: For i As Integer = 1 To 4
2: For j As Integer = 2 To i
3:  For k As Integer = 1 To j
4:   '<ステートメントブロック> 
5:  Next
6: Next
7: Next



1 行目にある I のループが、4 回処理されることは分かりますよね。
その 4 回の間に、i, j, k のループカウンタは、以下のように動作します。


《処理1》i = 1 です。
 2 行目は「For j = 2 To 1」の意味になるので、J, K のループが
 実行されることなく、7 行目で i = 2 に増加します。

《処理2》i = 2 です。
 2 行目は「For j = 2 To 2」の意味になるので、J のループは 1 回だけ動作します。
 3 行目は「For j = 1 To 2」の意味になり、K のループが 2 回動作します。
 ※ ステートメント 1回目:(i, j, k) = (2, 2, 1)
 ※ ステートメント 2回目:(i, j, k) = (2, 2, 2)

《処理3》i = 3 です。
 2 行目は「For j = 2 To 3」の意味になるので、J のループが 2 回動作します。
 3 行目は「For k = 1 To 2」と「For j = 1 To 3」のループとなります。
 ※ ステートメント 3回目:(i, j, k) = (3, 2, 1)
 ※ ステートメント 4回目:(i, j, k) = (3, 2, 2)

 ※ ステートメント 5回目:(i, j, k) = (3, 3, 1)
 ※ ステートメント 6回目:(i, j, k) = (3, 3, 2)
 ※ ステートメント 7回目:(i, j, k) = (3, 3, 3)

《処理4》i = 4 です。
 2 行目は「For j = 2 To 3」の意味になるので、J のループが 3 回動作します。
 3 行目は「For k = 1 To 2」と「For j = 1 To 3」と「For j = 1 To 4」です。
 ※ ステートメント 8回目:(i, j, k) = (4, 2, 1)
 ※ ステートメント 9回目:(i, j, k) = (4, 2, 2)

 ※ ステートメント10回目:(i, j, k) = (4, 3, 1)
 ※ ステートメント11回目:(i, j, k) = (4, 3, 2)
 ※ ステートメント12回目:(i, j, k) = (4, 3, 3)

 ※ ステートメント13回目:(i, j, k) = (4, 4, 1)
 ※ ステートメント14回目:(i, j, k) = (4, 4, 2)
 ※ ステートメント15回目:(i, j, k) = (4, 4, 3)
 ※ ステートメント16回目:(i, j, k) = (4, 4, 4)


よって、合計 16回実行されることになるわけです。