講義メモ

・p.104「for文」から

提出フォロー:アレンジ演習:直列ダンジョンへのモンスターの配置作り ini099b

・9匹満室の部屋には「満室」と表示しよう
例:
 1号室:●●●●●●●●●満室
 2号室:●●
 3号室:●●●
 4号室:
 5号室:●●●●●●●●●満室
 6号室:●●●●
ヒント:
・Debug.Logする直前に「nが9なら、sに"満室"を連結する」処理を挿入すれば良い

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mini099b : MonoBehaviour {
    void Start() {
        System.Random r = new System.Random(); //乱数クラスのオブジェクトを生成
        int a = 1; //1号室から
        while (a <= 6) { //6号室まで繰返す
            string s = a + "号室:"; //「■号室:」を用意
            int n = r.Next(10); //モンスター数を0~9にする
            int b = 0; //カウンタを0にする
            while (b < n) { //カウンタがモンスター数未満の間
                s += "●"; //文字列に"●"を連結             
                b = b + 1; //次のモンスターへ
            }
            if (n == 9) { //【以下追加】9匹いるなら
                s += "満室"; //文字列の後ろに連結
            }
            Debug.Log(s); //できた文字列を表示
            a = a + 1; //次の部屋へ
        }
    }
    void Update() {

    }
}

p.104 for文

・繰返し構文の一つでwhile文の回数指定特化バージョン。
・whileとおなじ前判定繰返しで、for文で書けるものはすべてwhileでも書ける
・回数指定の繰返しをwhile文で行うと、下記のパターン例になる
 ① カウンタ←0
 ② while(カウンタ < 回数) {
    繰返し内容
    ③ カウンタに1加算
   }
・上記の①②③を1文にするのがfor文
・書式: for(①; ②; ③ { 繰返し内容 }
・パターン例: for (カウンタ←0; カウンタ < 回数; カウンタに1加算) {繰返し内容}
・①では通常、for文の中でしか用いないカウンタ用の変数を用いるので、ここで初期化することが多く、
 主に「int i = 0;」とする。
・②ではこのカウンタ用の変数iを用いて「i < 回数」とすることが多い
・③でもこのカウンタ用の変数iを用いて「i = i + 1」とする代わりにインクリメント演算子を用いて
 「i++」とすることが多い
・よって、for文の基本的な形式は「for(int i = 0; i < 回数; i++)」となることが多い。
・ただし、①②③はどれも省略可能であり、上記とは異なる使い方も可能
・whileとおなじ前判定繰返しなので、②が最初から    Falseだと繰返し内容は一度も
 実行されない

p.105 chap3_3_1

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_3_1 : MonoBehaviour {
    void Start() {
        for (int cnt = 0; cnt < 5; cnt++) { //5回繰り返す
            Debug.Log("ハロー");
        } //forブロック(繰返し内容)の終わり
    }
    void Update() {

    }
}

p.105 インクリメント演算子

・複合代入演算子(+=,-=,など)と同様に、省略構文として「● = ● + 1」を「●++」と表記できる
・なお、インクリメント演算子には「●++」と「++●」があり、後置、前置と呼ぶ
・単独で用いる場合、後置、前置は同じ意味だが、式の中などに置くと意味が変わるので注意
・前置「++●」:前もって1加算し、その結果が評価になる。
 例: a = 1; Debug.Log(++a); //2と表示し、aの値は2
・前置「●++」:●の値を評価として、その後で1加算。
 例: a = 1; Debug.Log(a++); //1と表示し、aの値は2

ミニ演習:mini105

・chap3_3_1をwhile文にしよう

作成例

using UnityEngine;
public class mini105 : MonoBehaviour {
    void Start() {
        int cnt = 0; //forの①
        while(cnt < 5) { //forの②
            Debug.Log("ハロー"); //forの繰返し内容
            cnt++; //forの③
        }
    }
    void Update() {
    }
}

p.106 繰返し内容においてカウンタの変数を利用する

・for文においてカウンタの変数を初期化した場合、繰返し内容においてカウンタの変数を利用することができる
・これを用いることで「●をカウントアップしながら繰返す」ような処理が簡潔に表せる
・ただし、for文においてカウンタの変数を初期化した場合、その有効範囲はforの中だけなので、
 繰返しが終わってからカウンタの値を使いたい場合は工夫が必要

p.106 chap3_3_2

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_3_2 : MonoBehaviour {
    void Start() {
        for (int cnt = 0; cnt < 5; cnt++) { //5回繰り返す
            Debug.Log(cnt + "回目のハロー");  //カウンタの値に連結して表示
        } //forブロック(繰返し内容)の終わり
    }
    void Update() {

    }
}

アレンジ演習:chap3_3_2 ①

・「Debug.Log(cnt + "回目のハロー");」を改良して「0回目」ではなく「1回目」からにしよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_3_2 : MonoBehaviour {
    void Start() {
        for (int cnt = 0; cnt < 5; cnt++) { //5回繰り返す
            Debug.Log(cnt + 1 + "回目のハロー");  //カウンタの値に加算後連結して表示
        } //forブロック(繰返し内容)の終わり
    }
    void Update() {

    }
}

アレンジ演習:chap3_3_2 ②

・「for (int cnt = 0; cnt < 5; cnt++)」を改良して「0回目」ではなく「1回目」からにしよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_3_2 : MonoBehaviour {
    void Start() {
        for (int cnt = 1; cnt <= 5; cnt++) { //1から5までの5回繰り返す
            Debug.Log(cnt + "回目のハロー");  //カウンタの値に加算後連結して表示
        } //forブロック(繰返し内容)の終わり
    }
    void Update() {

    }
}

【補足】インクリメント演算子の演習

・式の中にインクリメント演算子を置いた場合、前置と後置の違いに加えて、途中で変数の値が変わることに注意
・例: int a = 1, b = a++, c = ++a;

ミニ演習:mini107a

・上記の例「int a = 1, b = a++, c = ++a;」実行後のa、b、cの値を想定してから表示しよう

作成例

using UnityEngine;
public class mini107a : MonoBehaviour {
    void Start() {
        int a = 1, b = a++, c = ++a;
        Debug.Log("a = " + a + " b = " + b + " c = " + c); //a=3 b=1 c=3となる
    }
    void Update() {
    }
}

解説

① a = 1 により、aは1、bは未定、cは未定
② b = a++ により、bがaの1で1、その後aは2になる、cは未定
③ c = ++a により、aは3になる、cがaの3で3に、bは変わらず1

ミニ演習:mini107b

・例「int a = 2, b = (a++) * (a++), c = (++a) * (++a);」実行後のa、b、cの値を想定してから表示しよう

作成例

using UnityEngine;
public class mini107a : MonoBehaviour {
    void Start() {
        int a = 2, b = (a++) * (a++), c = (++a) * (++a);
        Debug.Log("a = " + a + " b = " + b + " c = " + c); //a=6 b=6 c=30となる
    }
    void Update() {
    }
}

解説

① a = 2 により、aは2、bは未定、cは未定
② b = (a++) * (a++)は、まず、aの値が式に使われるので、式は2 * (a++)になり、aが3になる。
 それから、aの値が式に使われるので、式は2 * 3になり、aが4になる。
 式は2 * 3なので、bは6になる
③ c = (++a) * (++a)は、aが5になり、式は5 * (++a)になる。
 それから、aが6になり、式は5 * 6になる
 式は5 * 6なので、cは30になる

【補足】forのカウンタ用変数の再利用

・通常、forのカウンタ用変数はforの中でのみ有効とすることが望ましいことが多いが、
 例外的にforの外側でも用いる場合がある
・この場合は、forの前でカウンタ変数を宣言しておき、forの①で初期値を代入すると良い

アレンジ演習:chap3_3_2 ③

・forの繰返しが終わった後の変数cntの値を表示しよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap3_3_2 : MonoBehaviour {
    void Start() {
        int cnt; //【追加】forの外側でも有効になるように事前に宣言しておく
        for (cnt = 1; cnt <= 5; cnt++) { //【変更】1から5までの5回繰り返す
            Debug.Log(cnt + "回目のハロー");  //カウンタの値に加算後連結して表示
        } //forブロック(繰返し内容)の終わり
        Debug.Log("終了後のカウンタは" + cnt); //【追加】forの外側でも有効(6になる)
    }
    void Update() {

    }
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です