LoginSignup
1
1

More than 5 years have passed since last update.

プログラム超初心者メモ ループ系サンプルコード (Switch文の復習を兼ねて)

Last updated at Posted at 2018-01-11

ループ系サンプルコード (Switch文の復習を兼ねて)

このリンクを見て改めて・・・なんとなく、最初に学んだのが
forだったからか、forが好き。
基本、1行でいろいろ定義できる。
配列を使う場合に、配列のLengthが、実際の要素数より1多い事に注意が必要。
10個の要素があっても0番から始まるので、当然だが・・・
そういう問題点はあると思うが、基本自由度が高い印象。

foreach は簡潔に書けるが汎用性が低そう。
配列系を全部なめるときは良さそう。
もっと使っていいと思うが、現状はなんでもfor文になってるかも・・・

whileは、とても使いやすそうに見えるが・・・
とりあえず試し書きしながらというのが今の環境だと難しい。
コンパイルエラーがでなくても、Unityがプレヴュー実行可能で、脱出条件を書き忘れると
無限ループになって固まってしまうので慣れないと使いにくい。
その問題がなければ使いやすそうだが、現環境では学習効率上、致命的な欠点なので・・・
なので躊躇して書かないから、一年後も書けるようにならない気がする。

以下テストコード丸ごと
※ Unity Mac VScode 利用でのテスト用
 てきとうなゲームオブジェクトにこのコードを貼り付けてインスペクタで
 ループモードを変えれば、プリント内容が変わります。


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

public class Foreach_For_While : MonoBehaviour {

 private int[] IntArray ={0,11,222,3333,44444,555555};
 public enum LoopMode {Foreach,For,While,Stop};
 public LoopMode MyLoopMode;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        switch(MyLoopMode)
        {
            case LoopMode.Foreach:
                // int count=0;
                // ▲ Switch文はif文と違ってスコープが別れていないので、同名のローカル変数を作りにくい?
                // ▼ ・・・と思ったけどスコープの外に書いているからダメだったのがアドバイスで解りました。
                {
                    int count=0;
                    foreach(int num in IntArray)
                    {
                        print("foreach__"+num.ToString());
                        count++;
                        if(count==IntArray.Length){MyLoopMode=LoopMode.Stop;}
                    }
                    break;
                }
            case LoopMode.For:
                int maxF=IntArray.Length-1; 
                for(int i=0;i<=maxF;i++)
                {
                    print("for__"+IntArray[i].ToString());
                    if(i==maxF){MyLoopMode=LoopMode.Stop;}
                }
                break;
            case LoopMode.While:
                int countW=0,maxW=5;
                //while(int id < IntArray.Length)
                //     ↑ と 型を書いて定義することはできないっぽい。
                //ちょっとしたミスで、無限ループになる可能性がそこそこある…Unityが固まる。
                while( countW <= maxW)
                {
                     print("while__"+IntArray[countW].ToString());
                     if(countW==maxW){MyLoopMode=LoopMode.Stop;}
                     countW++;
                }
                break;
            case LoopMode.Stop:
                break;
        }
    }
}
1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1