Menu
CoddyTech

ネストされたループ

CoddyのGOジャーニー「基礎」セクションの一部。レッスン 49/109。

入れ子のループとは、別のループの中に配置されたループです。内側のループは、外側のループの反復ごとに最後まで実行されます。

入れ子のループを使って、1~3の数の掛け算表を作成しましょう。

rows := 3
cols := 3
for i := 1; i <= rows; i++ {
    for j := 1; j <= cols; j++ {
        fmt.Printf("%d×%d=%d\t", i, j, i*j)
    }
    fmt.Println()
}

このコードを実行すると、外側のループ変数(i)の各値に、内側のループ変数(j)のすべての値を掛けたものを各行に示す九九表が得られます。出力は画面に表示されます。

1×1=1   1×2=2   1×3=3   
2×1=2   2×2=4   2×3=6   
3×1=3   3×2=6   3×3=9   

これがどのように動作するのか、手順を追って理解しましょう。

まず、外側のループで i=1 が設定され、内側のループが最後まで実行されます。

i=1, j=1: prints "1×1=1"
i=1, j=2: prints "1×2=2"
i=1, j=3: prints "1×3=3"

内側のループが終了した後、fmt.Println() で改行を出力します。

次に、外側のループで i=2 が設定され、内側のループが最初から始まり、j が再び 1 から進みます。

i=2, j=1: prints "2×1=2"
i=2, j=2: prints "2×2=4"
i=2, j=3: prints "2×3=6"

最後に、外側のループで i=3 に設定され、内側のループが最後にもう一度実行されます。

i=3, j=1: prints "3×1=3"
i=3, j=2: prints "3×2=6"
i=3, j=3: prints "3×3=9"

各ループにはそれぞれ独自のカウンター(i と j)があり、rows と cols は変化しません。これらはループをいつ終了するかを示すだけです。このパターンは、データの表を扱ったり、グリッド状の構造を作成したりするときにとても便利です。

challenge icon

チャレンジ

初心者

このチャレンジでは、入れ子になったループを使って簡単なパターンを表示する練習をします。外側のループは行を反復し、内側のループは列を反復して、小さな文字のグリッドを作成します。

入れ子になったループを完成させて、アスタリスク (*) の3x3グリッドを表示してください。各アスタリスクの後にはスペースを入れるため、各行は * * * (末尾にスペースあり) のようになります。期待される出力は次のとおりです。

* * * 
* * * 
* * * 

各ループにはそれぞれ新しいカウンターを使い (たとえば、行には i、1行内のアスタリスクには j)、それを rows または columns と比較してください。rows と columns 自体は変更しないでください。各行で columns 回繰り返す必要があります。

自分で試してみよう

package main

import "fmt"

func main() {
	// グリッドの行数と列数
	rows := 3
	columns := 3
	
	// TODO: アスタリスク (*) のグリッドを表示するためのネストしたループを作成する
	// 外側のループで各行を順に処理する
	// 内側のループで各列を順に処理する
	for i := 0; i < rows; i++ {
		// 各列にアスタリスクを表示するため、ここに内側のループを追加する
		
		// 各行の後に改行を出力する
		fmt.Println()
	}
}
quiz icon腕試し

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

基礎のすべてのレッスン

自分で練習してみよう: Goオンラインコンパイラ