講義メモ ・p.110「繰り返し文を2つ組み合わせる」から 提出フォロー:ミニ演習 mini109c.cs:breakとcontinueの併用 ・string型のパブリック変数flgを定義して"y"で初期化しておく ・1から10まで下記を繰返す  ① 3の倍数ならば   ・flgが"y"であれば、スキップ(continue)する   ・flgが"y"以外であれば、繰り返しを脱出(break)する  ② カウンタの値を表示 ・表示した値の合計を表示 作成例 using UnityEngine; public class mini109c : MonoBehaviour{ public string flg = "y"; //処理選択フラグ void Start() { int sum = 0; //合計 for(int i = 1; i <= 10; i++) { //1から10まで繰返す if (i % 3 == 0) { //3の倍数? if (flg == "y") { //フラグがyなら continue; //スキップして次へ } else { break; //繰り返しを脱出 } } Debug.Log("i = " + i); sum += i; //合計に足しこむ } Debug.Log("合計 = " + sum); } } p.110 繰り返し文を2つ組み合わせる(2重ループ) ・繰り返し文の中に同じまたは異なる種類の繰り返し文をいくつでも記述できる ・これを2重ループ(多重ループ)という ・同種の繰り返しとして利用場面が多いのがforの2重ループ ・例:1~3年の1~4組について生徒数を表示 ・例:チェスの縦8マス×横8マスに駒を配置する ・forの2重ループの場合:  ①外側の繰り返し用のカウンタ変数(主にiを使うことが多い)と、内側の繰り返し用のカウンタ変数(主にjを使うことが多い)は異なる変数にする  ②内側の繰り返しでは外側の繰り返し用のカウンタ変数を利用できる  ③外側の1回目で内側の全回を行い、外側の2回目に進むイメージになる 例:  for (int i = 1; i <= 3; i++) { //1~3年について繰返す①⑭   for (int j = 1; j <= 4; j++) { //その1~4組について繰返す②⑤⑧⑪⑮…    Debug.Log(i + "年" + j + "組");③⑥⑨⑫   }④⑦⑩⑬  }⑬ 実行すると 1年1組、1年2組、1年3組、1年4組、2年1組、2年2組、… アレンジ演習:p.110 chap3_5_1.cs ・外側の繰り返しの上限の10をパブリック変数xa(初期値10)で渡すようにしよう ・内側の繰り返しの上限の10をパブリック変数ya(初期値10)で渡すようにしよう 作成例 using UnityEngine; public class chap3_5_1 : MonoBehaviour { public int xa = 10; //パブリック変数 public int ya = 10; //パブリック変数 void Start() { for (int x = 1; x < xa; x++) { //1の段から9の段まで繰返す for (int y = 1; y < ya; y++) { //各段の×1から×9まで繰返す Debug.Log(x * y); } } } } アレンジ演習:p.113 chap3_5_2.cs ・何の段まで繰返すかをパブリック変数xa(初期値9)で渡すようにしよう ・各段の繰り返しを段の数以下までに制限しよう ・つまり、1×1、2×1、2×2、3×1、3×2、3×3、4×1、4×2、…、9×9 とすること 作成例① using UnityEngine; public class chap3_5_2 : MonoBehaviour { public int xa = 9; //パブリック変数 void Start() { for (int x = 1; x <= xa; x++) { //1の段から9の段まで繰返す for (int y = 1; y <= 9; y++) { //各段の×1から×9まで繰返す if(y <= x) { //各段の繰り返しを段の数以下までに Debug.Log(x + "×" + y + "=" + x * y); } } } } } 作成例② using UnityEngine; public class chap3_5_2 : MonoBehaviour { public int xa = 9; //パブリック変数 void Start() { for (int x = 1; x <= xa; x++) { //1の段から9の段まで繰返す for (int y = 1; y <= x; y++) { //各段の×1から×段数まで繰返す Debug.Log(x + "×" + y + "=" + x * y); } } } } アレンジ演習:p.113 chap3_5_2.cs つづき ・1段分の九九はカンマつなぎにして1度で出力しよう ・実行結果  「1,」  「2,4,」  「3,6,9,」  … ・ヒント  ①内側の繰り返しの直前で連結用の文字列型変数sを""で初期化しておく  ②内側の繰り返しの中ではDebug.Logする代わりに、sに「x * y」と「,」を連結する  ③内側の繰り返しの直後でsをDebug.Logする  ※この後、①に戻るので、sは""で初期化される 作成例 using UnityEngine; public class chap3_5_2 : MonoBehaviour { public int xa = 9; //パブリック変数 void Start() { for (int x = 1; x <= xa; x++) { //1の段から9の段まで繰返す string s = ""; //連結用の文字列変数を空で初期化 for (int y = 1; y <= x; y++) { //各段の×1から×段数まで繰返す s = s + x * y + ","; //積とカンマを連結 } Debug.Log(s); //連結結果を出力 } } } 補足:多重繰り返しとbreak ・breakは繰り返しからの脱出になるが、2重繰り返しの内側でbreakした場合、外側の繰り返しは続行されるので注意 例:  for (int i = 1; i <= 3; i++) { //1~3年について繰返す①⑪   for (int j = 1; j <= 4; j++) { //その1~4組について繰返す②⑤⑧⑫⑮    if (i == 1 && j == 3) { //1年の3組以降は表示しない③⑥⑨⑬⑯     break; //⑩    }    Debug.Log(i + "年" + j + "組");④⑦⑭⑰…   }  }  実行すると 1年1組、1年2組、2年1組、2年2組、2年3組、2年4組、3年1組、…となる アレンジ演習:p.113 chap3_5_2.cs つづき ・50以上の積については表示しないようにしよう ・実行結果  「1,」  「2,4,」  「3,6,9,」  「4,8,12,16」  「5,10,15,20,25」  「6,12,18,24,30,36」  「7,14,21,28,35,42,49」  「8,16,24,32,40,48,」  「9,18,27,36,45,」 作成例 using UnityEngine; public class chap3_5_2 : MonoBehaviour { public int xa = 9; //パブリック変数 void Start() { for (int x = 1; x <= xa; x++) { //1の段から9の段まで繰返す string s = ""; //連結用の文字列変数を空で初期化 for (int y = 1; y <= x; y++) { //各段の×1から×段数まで繰返す if (x * y >= 50) { //積が50以上なら break; //この段の繰り返しを抜ける(次の段へ) } s = s + x * y + ","; //積とカンマを連結 } Debug.Log(s); //連結結果を出力 } } } 補足:多重繰り返しと外側のbreak ・2重繰り返しの内側でbreakした場合、外側の繰り返しは続行されるので、必要であれば外側でもbreakを行う ・しかし、内側のカウンタ変数は、外側の繰り返しでは利用できない ・よって、この場合、下記2通りの方法がある  ① 積を変数に保持しておいて外側の繰り返しでもチェックする  ② フラグとなる変数を外側の繰り返しでfalseにして用いる アレンジ演習:p.113 chap3_5_2.cs つづき ・積が50以上になったら、その時点までの内容を出力して終わるようにしよう ・まず、上記の①「積を変数に保持しておいて外側の繰り返しでもチェックする」で組んでみよう ・実行結果  「1,」  「2,4,」  「3,6,9,」  「4,8,12,16」  「5,10,15,20,25」  「6,12,18,24,30,36」  「7,14,21,28,35,42,49」  「8,16,24,32,40,48,」※56になるので出力して終了 作成例 using UnityEngine; public class chap3_5_2 : MonoBehaviour { public int xa = 9; //パブリック変数 void Start() { for (int x = 1; x <= xa; x++) { //1の段から9の段まで繰返す string s = ""; //連結用の文字列変数を空で初期化 int mul = 0; //積 for (int y = 1; y <= x; y++) { //各段の×1から×段数まで繰返す mul = x * y; //積を得る if (mul >= 50) { //積が50以上なら break; //この段の繰り返しを抜ける(次の段へ) } s = s + x * y + ","; //積とカンマを連結 } Debug.Log(s); //連結結果を出力 if (mul >= 50) { //積が50以上になっていたら break; //段の繰り返しを抜ける(終わる) } } } } アレンジ演習:p.113 chap3_5_2.cs つづき ・積が50以上になったら、その時点までの内容を出力して終わるようにしよう ・上記の②「フラグとなる変数を外側の繰り返しでfalseにして用いる」で組んでみよう 作成例 using UnityEngine; public class chap3_5_2 : MonoBehaviour { public int xa = 9; //パブリック変数 void Start() { bool flg = false; //フラグを未完にしておく for (int x = 1; x <= xa; x++) { //1の段から9の段まで繰返す string s = ""; //連結用の文字列変数を空で初期化 for (int y = 1; y <= x; y++) { //各段の×1から×段数まで繰返す if (x * y >= 50) { //積が50以上なら flg = true; //フラグを完了にする break; //この段の繰り返しを抜ける(次の段へ) } s = s + x * y + ","; //積とカンマを連結 } Debug.Log(s); //連結結果を出力 if (flg) { //フラグが完了? break; //段の繰り返しを抜ける(終わる) } } } } p.114 配列の書き方 ・配列:同じ型の同じ意味の変数群をまとめて扱う仕組み(データ構造) ・まとめたものに名前(配列名)を付け、0から数えて何番目かを示す添字(インデクス)を付けて表す ・例: スラリン、ホイミン、リムルを、スライムという配列の[0]番[1]番[2]番とする ・配列に属するデータのことを要素という ・変数と同様に、配列は宣言が必要 ・配列の宣言の書式: 型[] 配列名;  例: string[] slimes; ・変数とは異なり、初期化において、要素の値を列記できる ・配列の初期化の書式: 型[] 配列名 = {要素値, 要素値, …};  例: string[] slimes = {"スラリン","ホイミン","リムル"}; ・これにより、slimes[0]には"スラリン"、slimes[1]には"ホイミン"、slimes[2]には"リムル"が格納される ・配列の各要素は配列名[添字]で変数と同様に利用できる 補足:配列の添字と要素数 ・なお、3要素の配列の最後の要素は[2]であり、[3]をアクセスすると異常終了する ・また、添字には0以上の整数のみ可能で、負の数や実数を与えると異常終了する 補足:配列の宣言と生成 ・テキストでは配列は全て初期化(要素の数だけの値を格納)して用いている ・実際の仕様では、配列の要素を要素数を指定して確保(生成)しておき、後で要素値を代入することも多い ・配列の宣言の書式: 型[] 配列名; ・配列の生成の書式: 配列名 = new 型[要素数]; //要素数の分の領域を確保(生成)する ・宣言と生成は同時に行ってよい: 型[] 配列名 = new 型[要素数];  例: string[] slimes = new string[3]; //要素数3の文字列型配列slimesの生成 アレンジ演習:chap3_6_1 ・配列の添字はint型の変数でも可能なことを確認しよう ・そして、これをパブリック変数にすることで、0から3まで変更して違う方角が表示されることを確認しよう 作成例 using UnityEngine; public class chap3_6_1 : MonoBehaviour{ public int n = 0; //【追加】パブリック変数(添字用) void Start() { string[] dirs = {"東","西","南","北"}; Debug.Log(dirs[n]); //パブリック変数を添字として当てはまる要素を表示 } } 配列の要素を書き換える ・配列の要素は変数と同じ扱いなので、代入の左辺に置くことで、値を代入して書き換えることが可能 ・書式例: 配列名[添字] = 式や値; string.Join()メソッド ・string型の配列の全要素を連結した文字列を得たい場合に便利なメソッドとして提供されている ・利用書式: 文字列型変数 = string.Join(区切り文字, string型配列名); ・なお、直接表示したり、利用することも可能 ・例: Debug.Log(string.Join(",", slimes)); //"スラリン,ホイミン,リムル"を出力 アレンジ演習:chap3_6_2 ・書き換えたい要素の添字と、書き換える文字列をパブリック変数で与えるようにしよう ・ついでに、string.Joinの区切り文字もパブリック変数で与えるようにしよう 提出:アレンジ演習:chap3_6_2 次回予告:p.117「要素を入れずに配列を作成する」から