質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

2回答

3288閲覧

for文がよくわかりません

退会済みユーザー

退会済みユーザー

総合スコア0

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2020/05/23 06:29

何が起きているのですか

for (int j = 1; j < 11; j = j + 1) {
for (int i = 1; i < 11; i = i + 1) {
rect((i-1) * 10, (j-1) * 10, 8, 8);
}
}

正方形が大量に並ぶ理由を知りたいです。
これを書き換えて正方形を階段状に並べたいです。

ソースコードprocessing

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/05/23 06:51

正方形を 10 個並べるのを 10 回繰り返しているからです。
guest

回答2

0

ベストアンサー

for は繰り返しを行うための構文です。

1 まず、外側の for 文について考えてみましょう。

java

1for (int j = 1; j < 11; j = j + 1) { 2 3}

まず、int j = 1; で最初に int 型の整数 j が宣言され、1 に初期化されます。

次の j < 11; は繰り返しの継続条件で j が 11 より小さい間は、処理が繰り返されるということです。

j = j + 1 は、1回内側の処理が終わったたびに jj+1 を代入しています。

結果、jは、1,2,3 ... 10 まで変化し、11 になった時点で終了します。

2 次に内側の for 文について考えてみます。

java

1 for (int i = 1; i < 11; i = i + 1) { 2 3 }

これは、最初に int 型の変数 i1 に初期化し、i < 11 の間は繰り返し、1回内側の処理が終わったたびに ii+1 を代入します。

結果、i は、1,2,3 ... 10 まで変化し、11 になった時点で終了します。

3 これらを組み合わせて rect((i-1) * 10, (j-1) * 10, 8, 8); がどのように処理されていくのかをトレースしてみます。

まず、最初に j=1

java

1 for (int i = 1; i < 11; i = i + 1) { 2 rect((i-1) * 10, (j-1) * 10, 8, 8); 3 }

の処理が実行されます。

最初、j=1、i=1 で rect() が実行されるので rect((1-1) * 10, (1-1) * 10, 8, 8); が実行されることになります。

次は、j=1、i=2 で rect() が実行されるので rect((2-1) * 10, (1-1) * 10, 8, 8); が実行されます。

以下、同様に次のように動いていきます。

j=1、i=3 → rect((3-1) * 10, (1-1) * 10, 8, 8);

(i=4 から i=9 を省略します。)

j=1、i=10 → rect((10-1) * 10, (1-1) * 10, 8, 8);

次に j=1、i=11 になりますが、内側の for 文の継続条件に合わないため、j=1 の処理が終了してて、j=j+1 が実行され、j=2 の処理に移ります。

j=2、i=1rect((1-1) * 10, (2-1) * 10, 8, 8);

j=2、i=2rect((2-1) * 10, (2-1) * 10, 8, 8);

(以降は省略)

以上のような処理が繰り返されることで正方形がたくさん、作られます。

【階段を作る一例】

java

1for (int j = 1; j < 11; j = j + 1) { 2 for (int i = 1; i <= j; i = i + 1) { 3 rect((i-1) * 10, (j-1) * 10, 8, 8); 4 } 5}

上記のように変更すると以下のような絵になります。

イメージ説明

これが理解出来たら、左右反対にするには、どうすればよいのか、考えてみましょう。

投稿2020/05/23 07:12

編集2020/05/23 07:17
Yasumichi

総合スコア1773

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/23 11:03

分かりやすい解説に加えて問題までだしていただきましてありがとうございます。 言い訳になりますが、私は中学生なのでまだまだ日本語がへたくそです。もし失礼なことを言ったらすみません。 for (int j = 1; j < 11; j = j + 1) { for (int i = 1; i <= j; i = i + 1) { rect((j-1) * 10, (i-1) * 10, 8, 8); } } この問題のおかげでとても理解が深まりました。ありがとうございます。
guest

0

for文なんて全然難しいものじゃないです。

for(初期化; 継続判別式; 更新式) 実行文

これだけ。

for文に到達すると、
初期化を行い、
継続判別式がtrueだったら実行文を実行し/falseだったらfor文終わり
更新式を実行して、
継続判別式がtrueだったら実行文を実行し/falseだったらfor文終わり
更新式を実行して、
...
つまり、継続判別式がtrueになる間実行分と更新式を繰り返します。

for文とは直接には関係ないけれど、ブロックと言って、{ }で囲むと0個以上の文を一つの文として扱うので、実行文にブロックを置くことは普通に行われます。

余計なことは考えずに、以上の規則を

Processing

1for (int j = 1; j < 11; j = j + 1) { //for①とする 2 for (int i = 1; i < 11; i = i + 1) { //for②とする 3 rect((i-1) * 10, (j-1) * 10, 8, 8); 4 } 5}

に適用します。

text

1for①に到達するとjを宣言して1を設定します。 2jは1で、継続判別式j<11はtrueなので、実行文を実行します。 3for①の実行文はfor②です。 4 for②では、iを宣言して1を設定します。 5 iは1で、継続判別式i<11はtrueなので、実行文を実行します。 6 for②の実行文は`rect((i-1) * 10, (j-1) * 10, 8, 8);`です。 7 ここまでで、iは1,jは1なので、rect(0,0,8,8)で正方形を描画します。 8 for②の実行文が終わったので、for②の更新式を実行します。i=i+1ということで、iは2になります。 9 iは2で、i<11はtrueなので、実行文を実行します。 10 iは2,jは1なので、rect(10,0,8,8)で正方形を描画します。 11 for②の更新式を実行し、iは3になります。 12 iは3で、i<11はtrueなので、実行文を実行します。 13 iは3,jは1なので、rect(20,0,8,8)で正方形を描画します。 14 for②の更新式を実行し、iは4になります。 15(同様の繰り返しなので中略。理解できますね?) 16 iは10,jは1なので、rect(90,0,8,8)で正方形を描画します。 17 for②の更新式を実行し、iは11になります。 18 iは11で、i<11はfalseなので、for②を終了します 19for①の実行文が終わったので、for①の更新式を実行します。jは2になります。 20jは2で、j<11はtrueなので、実行文を実行します。 21 for②では、iを宣言して1を設定します。 22 iは1で、i<11はtrueなので、実行文を実行します。 23 ここまでで、iは1,jは2なので、rect(0,10,8,8)で正方形を描画します。 24 for②の実行文が終わったので、for②の更新式を実行します。i=i+1ということで、iは2になります。 25(中略) 26 iは10,jは2なので、rect(90,10,8,8)で正方形を描画します。 27 for②の更新式を実行し、iは11になります。 28 iは11で、i<11はfalseなので、for②を終了します 29for①の更新式を実行し、jは3になります。 30jは3で、j<11はtrueなので、実行文を実行します。 31(中略略) 32 iは10,jは10なので、rect(90,90,8,8)で正方形を描画します。 33 for②の更新式を実行し、iは11になります。 34 iは11で、i<11はfalseなので、for②を終了します 35for①の更新式を実行し、jは11になります。 36jは11で、j<11はtrueなので、for①を終了します

なにか疑問な点がありますか?

投稿2020/05/23 07:29

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/23 10:38

このような雑な質問にご丁寧に回答してくださいましてありがとうございます。 とても分かりやすくて理解することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問