Menu
CoddyTech

ネストしたループ

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

ネストされたループとは、別のループの中にあるループです。外側のループが1回繰り返されるごとに、内側のループはすべての反復を実行します。

var rows := 3
var cols := 2
for i in range(rows):
	print("Outer: ", i)
	for j in range(cols):
		print("  Inner: ", j)
Outer: 0
  Inner: 0
  Inner: 1
Outer: 1
  Inner: 0
  Inner: 1
Outer: 2
  Inner: 0
  Inner: 1

内側のブロックは2段階インデントされています。全体で rows x cols = 3 x 2 = 6 回実行されます。外側のループが実行されるたびに j は 0 から再び始まり、rows と cols は変わらず、ループをいつ停止するかを示すだけです。

2つのループには異なる変数名が必要です。別のfor iの中にfor iと書くとエラーになり、プログラムの実行前に報告されます。

入れ子になったループは、行や列を扱うのに便利です。print()は常に行末で改行するため、星印を1行に出力するには、まず文字列に組み立て、内側のループが終わったら一度だけ出力します。

for row in range(2):
	var line := ""
	for col in range(3):
		line += "*"
	print(line)
***
***

外側のループは行ごとに1回実行され、内側のループは列ごとに星を1つ追加します。内側のループ内のbreakは内側のループだけを停止します。外側のループは次の反復に進みます。

challenge icon

チャレンジ

簡単

このプログラムは2つの整数、rowsとcolsを読み取ります。

ネストしたループを使って、rows行、それぞれの行にcols個の星(*)が並ぶ長方形を出力します。

入力が3と4の場合、出力は次のとおりです。

****
****
****

各ループに新しいカウンターを使い(たとえば、行にはrow、1行の星の数にはcol)、それをrowsまたはcolsと比較します。rowsとcols自体は変更しないでください。各行で再びcols個の星が必要です。

自分で試してみよう

extends Node

func _ready():
	var rows := int(OS.read_string_from_stdin())
	var cols := int(OS.read_string_from_stdin())
	# 外側のループ: 行ごとに1回繰り返す
	# 内側のループ: 列ごとに星を1つ追加する
quiz icon腕試し

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

基礎のすべてのレッスン

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