question2024
@question2024 (step1engineer)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Java Silver SE11 二重ループ問題

何についてか

添付画像にある問題の5行目のうち
jの更新文の箇所についての質問です。

質問の詳細について

前提として、私はこの問題の解説を読んでも
未だ理解することができていません。
この問題のポイントである
・外側ループにaラベルが使われている
・内側ループにbラベルが使われている
・continueがaラベルへ移動する
・breakがbラベルへ移動する
・continueの条件式ではiを使っている
・breakの時にはjを使っている
という点は理解できています。(つもりです。。)

みなさまに質問したことは、
解説にある表のうち、
2行目のiが1、jが0の箇所についてです。
一回目のループで、
i, jともに更新文により
それぞれ0から1になっている理解でいるのですが、
なぜjは0のままなのでしょうか。

質問をうまく細かく書くことができず
雑な文章になってしまっています。
この質問では聞きたいことがわからない等
ありましたら、ご指摘、ご質問いただけると
幸いです。

問題の写真
IMG_7782.jpeg

解説に載っている表の写真
IMG_7781.jpeg

0

2Answer

i=1,i=3のとき、「b:」のループはそれぞれ単独で実行されます。つまり、それぞれjが0からスタートします。int jの定義はforの中ですから、有効範囲は「b:」のfor分の中です。「b:」のforの外側からjを利用できません=参照できない、値維持できないです。
http://www3.nit.ac.jp/~tamura/java/scope.html

1Like

Comments

  1. @question2024

    Questioner

    @changkejun
    今更ですが、コメントで解説をいただきましてありがとうございます。
    いただいたリンク先の記事も読みました。
    すぐには理解できませんでしたが、何度もとき直しをして、いただいたサイトの中身、その他参考サイトみて5月頭にやっと理解できました。。。
    ありがとうございましたm(_ _)m

まず、単純な二重ループですが、

for(int i = 0;i < 5;i++){
 for(int j = 0;j < 5;j++){
  System.out.println("(" + i +"," + j + ")");
 }
}

この出力が
(0,0)(0,1)(0,2)(0,3)(0,4)(1,0)(1,1)…
となっていくのはわかりますか?

1Like

Comments

  1. @question2024

    Questioner

    @koshi_waru
    今更ですが、コメントで解説をいただきましてありがとうございます。
    いただいた質問をきっかけに、理解することができました。
    (0,0)(0,1)(0,2)(0,3)(0,4)(1,0)(1,1)… この流れが正しく理解できていないようでした。
    このあたりから復習したときに、今回つまづいた問題を解けるようになりました。
    ありがとうございましたm(_ _)m

Your answer might help someone💌