Menu
CoddyTech

ネストされたループ

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=3

i が 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()は各行の後に次の行へ移動します。

challenge icon

チャレンジ

中級

入力から整数 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()を使う
    
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Kotlinプレイグラウンド