ネストされたループ
CoddyのKotlinジャーニー「基礎」セクションの一部。レッスン 52/93。
ループの中に別のループを配置して、入れ子のループを作成できます。外側のループが1回反復するごとに、内側のループが最後まで実行されます。
val rows = 2
val cols = 3
for (i in 1..rows) {
for (j in 1..cols) {
println("i=$i, j=$j")
}
}
// 出力:
// i=1, j=1
// i=1, j=2
// i=1, j=3
// i=2, j=1
// i=2, j=2
// i=2, j=3i が 1 のとき、内側のループは cols 回実行されます(j は 1 から 3 まで進みます)。次に i が 2 になり、内側のループが最初から始まり、j は再び 1 から 3 まで進みます。これで合計 2 × 3 = 6 回の反復になります。rows と cols は変化しません。これらはループをいつ終了するかを示すだけです。
入れ子になったループは、パターンを作成したり、グリッド状の構造を扱ったりするためによく使われます。
for (row in 1..3) {
for (col in 1..row) {
print("*")
}
println()
}
// 出力:
// *
// **
// ***ここでは、内側のループの範囲が外側のループの変数に依存し、三角形のパターンが作られます。print()関数は改行せずに出力し、println()は各行の後に次の行へ移動します。
チャレンジ
中級入力から整数 n を読み取ります。入れ子になったループを使って、1 から n までの数の掛け算表を出力します。
1 から n までの各行 i について、積 i * 1、i * 2、...、i * n をスペースで区切って出力し、その後に改行します。
たとえば、入力が 3 の場合、出力は次のようになります。
1 2 3
2 4 6
3 6 9入力が 4 の場合、出力は次のようになります。
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16同じ行に値を出力するには、スペースを付けて print() を使い、次の行に移るには println() を使います。
各ループでは別々のカウンターを使い(たとえば、行には i、列には j)、どちらも n と比較します。n 自体は変更しないでください。各行で再び必要になります。
自分で試してみよう
fun main() {
// 入力を読み取る
val n = readLine()!!.toInt()
// TODO: 以下にコードを書く
// ネストしたループを使って九九の表を出力する
// 同じ行に値を出力するには、空白を付けてprint()を使う
// 次の行に移るにはprintln()を使う
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Kotlinプレイグラウンド