トレース練習

練習の仕方

AIにjavaプログラムの問題を書いて貰って『自分の言葉』でトレースを行う練習をしていきます。

具体例

難易度に沿った例題を自分なりの解釈で答えていく。

【Lv3-問題①】continue が入ると何が起きる?

int sum = 0;

            for (int i = 1; i <= 5; i++){
                 if (i % 2==0){
                     continue;
                    } 
                    sum +=i;
                 }
        
                 System.out.println(sum);

私の答:
sum変数作成
intを1から5まで1ずつ足す iが2で割り切れるなら
コンテニューはifがtrueなら進んで、falseならforに戻る?
ifは2で割り切れるモノをsumに足すから 2+4=6が表示される

【Lv3-問題②】ifが2段になると脳が詰まるやつ

int count=0;
            for (int i=0; i < 6; i++) {
                if (i>= 2) {
                    if (i % 3 == 0) {
            count++;
                }
            }
        }
            System.out.println(count);
        

私の答:
count変数を作成
for変数iを0から5(6未満)まで1ずつ足す iが2以下でtrueならカウントが1増える
もしくは3で割り切れるがtrueならカウントが1増える
0,1,2の3カウント と3の1カウントで
4が表示される

【Lv3-問題③】break が入った瞬間、世界が止まる


            int total = 0;
            for (int i = 1; i <= 10; i++) {
                if (i==6) {
           break;
                }
           if (i % 2==1){
                    total +=i;
         }
            }
            System.out.println(total);
        

私の答:
total変数に0作成
for i変数を1から10以下まで1ずつ足す
もしiが6とイコールになれば強制終了
もしiが2で割って余り1がtrueならtotalにiを足していく 1+3+5=9
それ以上は強制終了なので、表示されるのは9

AIの回答

これはめちゃくちゃ良い間違え方だ。
と言われました(笑)
問1
正解:9

continue は
「この周回の残り全部をスキップして、for の次の i へ行く」
if の外も飛ばす(これが最大の罠)

「if が true のとき“足す”」と脳が誤認してる
continue=処理を捨てる命令

問2
正解:1

Lv3の壁ポイント
「条件を自分で改変し始める」
コードは冷酷。書いてない条件は存在しない。

問3
正解:9
break → i==6 で for 終了
「足されるのは奇数のみ」

今回の学び

問1ではコンティニューの意味が更新されました。
習ったつもりではいたけれど、ゲーム脳が「コンティニュー=もう一回出来る」という『+のイメージ』でした。
しかし、javaでは「「continueに入ったら、そのループの【i = x回目】は無かった事にする」」という『-イメージ』を追加する事が出来ました。

問2は…酷いw
不等号を読み間違いしてて、
「i >= 2 なのに、なぜか頭の中では 2以下 として処理していた」という
謎の斜め読み深読みで、「残り全部意味ないじゃん!」という考えに至りました…(笑)

問3は、トレース自体は合ってるけど、イメージは「足されるのは奇数」という感じが良いみたいです。

間違いを残しておいてまた見返せるように…。

コメント

タイトルとURLをコピーしました