C#&Unityの演習問題：しまづ君にプログラミングを教えよう！パート2【スタジオしまづアカデミア】

（ベータ版：いいねと思ったらtwitterに投稿してもらえると嬉しいです＾＾）
（おすすめの問題があれば、編集リクエストで追加していただけると助かります）

前回：https://qiita.com/simanezumi1989/items/01690ec883ae8135b3e7

#これはあなた自身の物語です
ときは戦国、、、
ゲーム開発をするためにプログラミングを学び始めたしまづ君（永遠の3才）。
ところが彼はまだまだプログラミングのことがわかっていません。
のちに世界を救うこととなる「スタジオしまづ」設立のために彼にプログラミングを教えましょう！

演習問題を行う前の準備：[困った人向け](https://youtu.be/XquKGX3RB8I)


スタジオしまづの[YouTube](https://www.youtube.com/channel/UCDunz_CPkqkQT5ljKXcYkhg?view_as=subscriber)
スタジオしまづの[学習サイト](https://d35e.uscreen.io/)


##演習問題18：配列の宣言方法がわかっている？
しまづくん：「10,20,30」の値を持つ配列を作ろうとしたんだけど、うまくいかなかったんんだ。何がおかしいかな？

しまづ君のコード

```Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    int[] numbers = 10;
    int[] numbers = 20;
    int[] numbers = 30;
    void Start()
    {
    }
}
```

---解答ルパン---

```Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    int[] numbers = { 10, 20, 30 };
    // 以下でもOK
    //int[] numbers = new int[] { 10, 20, 30 };
    //int[] numbers = new int[3] { 10, 20, 30 };
    void Start()
    {
        // 関数の中で決めてもOK以下でもOK
        // numbers = new int[3] { 10, 20, 30 };
    }
}
```
しまづ君：ありがとう！配列の宣言方法がわかったよ＾＾

##演習問題19：配列の値取得がわかっている？
しまづくん：ゲーム再生をして、配列の値を全部コンソールに表示しようと思ったんだけど、エラーが出ちゃったよ＾＾；
何がおかしいかな？
<img width="657" alt="スクリーンショット 2020-03-02 15.37.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67439/1c973fda-6f36-88fd-c9e4-5e7097eeadba.png">


しまづ君のコード

```Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    int[] numbers = { 10, 20, 30 };
    void Start()
    {
        int x = numbers[1];
        Debug.Log(x);
        int y = numbers[2];
        Debug.Log(y);
        int z = numbers[3];
        Debug.Log(z);

    }
}
```

---解答ルパン---

```Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    int[] numbers = { 10, 20, 30 };
    void Start()
    {
        int x = numbers[0];
        Debug.Log(x);
        int y = numbers[1];
        Debug.Log(y);
        int z = numbers[2];
        Debug.Log(z);
        //以下でもOK
        /*
        Debug.Log(numbers[0]);
        Debug.Log(numbers[1]);
        Debug.Log(numbers[2]);
        */
    }
}
```
しまづ君：ありがとう！配列の値取得方法がわかったよ＾＾


##演習問題20：配列の値変更方法がわかっている？
しまづくん：配列の1番目の値を変更しようとしたけど、うまくいかなかったよ、、、どうやって変えるの？


しまづ君のコード

```Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    int[] numbers = { 10, 20, 30 };
    void Start()
    {
        numbers = 1;
        Debug.Log(numbers[1]);
    }
}
```

---解答ルパン---

```Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    int[] numbers = { 10, 20, 30 };
    void Start()
    {
        numbers[1] = 1;
        Debug.Log(numbers[1]);
    }
}
```
しまづ君：ありがとう！配列の値変更方法がわかったよ＾＾

##演習問題21：配列とfor文の組み合わせ？
しまづくん：配列の値を全部コンソールに表示しようとしたんだけど、疲れちゃった。何か簡単にする方法ない？for文使うといいって聞いたんだけど。。。グッスン（TへT）


しまづ君のコード

```Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    int[] numbers = { 10, 20, 30, 1,2,33,-33,44,556,54345,3434 };
    void Start()
    {
        Debug.Log(numbers[0]);
        Debug.Log(numbers[1]);
        Debug.Log(numbers[2]);
        Debug.Log(numbers[3]);
        // 疲れちゃったw
    }
}
```

---解答ルパン---

```Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    int[] numbers = { 10, 20, 30, 1,2,33,-33,44,556,54345,3434 };
    void Start()
    {
        for (int i =0 ; i<11; i++)
        {
            Debug.Log(numbers[i]);
        }
        //以下でも同じ：nはnumbersに入っている値：これだとiとかいらないからすっきりする
        /*
        foreach (int n in numbers)
        {
            Debug.Log(n);
        }*/
    }
}
```
しまづ君：ありがとう！配列とfor文の組み合わせがわかったよ！

##演習問題22：配列とfor文の組み合わせ
しまづくん：さっきみたいに配列の値を全部コンソールに表示しようとしたんだけど、配列を変えたら全部表示されなくなっちゃった。配列を変えてもfor文は変えないコードって知ってる？


しまづ君のコード

```Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    int[] numbers = { 10, 20, 30, 1, 2, 33, -33, 44, 556, 54345, 3434, -1, 222, 333 };
    void Start()
    {
        // 3434までしか表示されない
        for (int i =0 ; i<11; i++)
        {
            Debug.Log(numbers[i]);
        }
    }
}
```

---解答ルパン---

```Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    int[] numbers = { 10, 20, 30, 1, 2, 33, -33, 44, 556, 54345, 3434, -1, 222, 333 };
    void Start()
    {
        // 3434までしか表示されない
        for (int i =0 ; i<numbers.Length; i++)
        {
            Debug.Log(numbers[i]);
        }
    }
}
```
しまづ君：ありがとう！配列とfor文の組み合わせがわかったよ！

##演習問題23：配列とfor文の組み合わせ
しまづくん：配列の値の合計を調べようと思ったんだけど、またどうやって全部足せばいいのか忘れちゃって＾＾；
for文の使い方もう一度教えてください(TへT)


しまづ君のコード

```Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{

    int sum = 0;
    int[] numbers = { 10, 20, 30, 1, 2, 33, -33, 44, 556, 54345, 3434, -1, 222, 333 };
    void Start()
    {
        sum += numbers[0];
        sum += numbers[1];
        sum += numbers[2];
        // 途中でおわっちゃった、、、for文とかでさくっとできないかな？

    }
}
```

---解答ルパン---

```Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{

    int sum = 0;
    int[] numbers = { 10, 20, 30, 1, 2, 33, -33, 44, 556, 54345, 3434, -1, 222, 333 };
    void Start()
    {
        for (int i=0; i<numbers.Length; i++)
        {
            sum += numbers[i];
        }
        Debug.Log(sum);
    }
}
```
しまづ君：ありがとう！配列とfor文の組み合わせがわかったよ！

##演習問題24：List型の宣言方法
しまづくん：List型ってのを作ろうとしたんだけど、うまくいかなくて、、、何をなおせばいいかな？

参考動画：[イラスト解説 List型](https://youtu.be/4WxDq1TCN28)
しまづ君のコード

```Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    string nameList = { "スタジオしまづ", "嶋津恒彦", "しまづ"};
    void Start()
    {
    }
}
```

---解答ルパン---

```Question.cs
using System.Collections.Generic;
using UnityEngine;

public class Question : MonoBehaviour
{
    List<string> nameList = new List<string>{ "スタジオしまづ", "嶋津恒彦", "しまづ"};
    void Start()
    {
    }
}
```
しまづ君：ありがとう！List型はusingも必要なのか！



##演習問題25：List型の値取得と変更方法
しまづくん：List型の値の取得と変更をしようとしたんだけどうまくいかなく。どうすればいいかな？

しまづ君のコード

```Question.cs
using System.Collections.Generic;
using UnityEngine;

public class Question : MonoBehaviour
{
    List<string> nameList = new List<string>{ "スタジオしまづ", "嶋津恒彦", "しまづ"};
    void Start()
    {
        // コンソールに0番目を表示したい
        // 0番目の値を"スタジオしまづアカデミア"に変更したい
        // コンソールに0番目を表示したい

    }
}
```

---解答ルパン---

```Question.cs
using System.Collections.Generic;
using UnityEngine;

public class Question : MonoBehaviour
{
    List<string> nameList = new List<string>{ "スタジオしまづ", "嶋津恒彦", "しまづ"};
    void Start()
    {
        // コンソールに0番目を表示したい
        string firstName = nameList[0];
        Debug.Log(firstName);
        Debug.Log(nameList[0]); // これでもOK

        // 0番目の値を"スタジオしまづアカデミア"に変更したい
        nameList[0] = "スタジオしまづアカデミア";
        // コンソールに0番目を表示したい
        Debug.Log(nameList[0]);

    }
}
```
しまづ君：ありがとう！リスト型って配列と同じようなものなんだね＾＾



##演習問題26：List型とfor文
しまづくん：List型と配列って同じようなものなら、値を全部表示するのも同じようにできるよね！でも長さの部分をどうするんだろ、、、教えて教えて＾＾

しまづ君のコード

```Question.cs
using System.Collections.Generic;
using UnityEngine;

public class Question : MonoBehaviour
{
    List<string> nameList = new List<string>{ "スタジオしまづ", "嶋津恒彦", "しまづ"};
    void Start()
    {
        // for文を使って以下と同じログを表示したい
        Debug.Log(nameList[0]);
        Debug.Log(nameList[1]);
        Debug.Log(nameList[2]);
    }
}
```

---解答ルパン---

```Question.cs
using System.Collections.Generic;
using UnityEngine;

public class Question : MonoBehaviour
{
    List<string> nameList = new List<string>{ "スタジオしまづ", "嶋津恒彦", "しまづ"};
    void Start()
    {
        for (int i=0; i<nameList.Count; i++)
        {
            Debug.Log(nameList[i]);
        }
    }
}
```
しまづ君：ありがとう！リスト型はCountを使うのか！＾＾



##演習問題27：List型の値の追加
しまづくん：List型は値を追加できるって聞いたけど、どうやってやるの？"スタジオしまづアカデミア"を追加したい！

しまづ君のコード

```Question.cs
using System.Collections.Generic;
using UnityEngine;

public class Question : MonoBehaviour
{
    List<string> nameList = new List<string>{ "スタジオしまづ", "嶋津恒彦", "しまづ"};

    void Start()
    {
        // nameListに"スタジオしまづアカデミア"を追加したい：Addってのを使う


        // 追加したあと、全ての値をログに表示して追加されたのを確認したい
    }
}
```

---解答ルパン---

```Question.cs
using System.Collections.Generic;
using UnityEngine;

public class Question : MonoBehaviour
{
    List<string> nameList = new List<string>{ "スタジオしまづ", "嶋津恒彦", "しまづ"};

    void Start()
    {
        // nameListに"スタジオしまづアカデミア"を追加したい：Addってのを使う
        nameList.Add("スタジオしまづアカデミア");

        // 追加したあと、全ての値をログに表示して追加されたのを確認したい
        for (int i=0; i<nameList.Count; i++)
        {
            Debug.Log(nameList[i]);
        }
        // 以下でもOK
        /*
        foreach (string name in nameList)
        {
            Debug.Log(name);
        }
        */
    }
}
```
しまづ君：ありがとう！リスト型はAddって便利だね＾＾



##演習問題28：List型の値の削除
しまづくん：List型は値の削除ができるって聞いたけど、どうやってやるの？"アンチスタジオしまづ"をこの世から抹殺したい！！！！

しまづ君のコード

```Question.cs
using System.Collections.Generic;
using UnityEngine;

public class Question : MonoBehaviour
{
    List<string> nameList = new List<string>{ "スタジオしまづ", "アンチスタジオしまづ", "しまづ"};

    void Start()
    {
        // nameListの"アンチスタジオしまづ"を消したい
   }
}
```

---解答ルパン---

```Question.cs
using System.Collections.Generic;
using UnityEngine;

public class Question : MonoBehaviour
{
    List<string> nameList = new List<string>{ "スタジオしまづ", "アンチスタジオしまづ", "しまづ"};

    void Start()
    {
        // nameListの"アンチスタジオしまづ"を消したい
        nameList.Remove("アンチスタジオしまづ");
        // 番号指定での削除もできるよ
        //nameList.RemoveAt(1);

        for (int i = 0; i < nameList.Count; i++)
        {
            Debug.Log(nameList[i]);
        }
        // 以下でもOK
        /*
        foreach (string name in nameList)
        {
            Debug.Log(name);
        }
        */

    }
}
```
しまづ君：ありがとう！これでアンチも消えたね！

##つづき
- [つづき](https://qiita.com/simanezumi1989/items/a616040403d599333a70)：いいねと思ったらtwitterでシェアお願いします＾＾
- スタジオしまづの[YouTube](https://www.youtube.com/channel/UCDunz_CPkqkQT5ljKXcYkhg?view_as=subscriber)：チャンネル登録お願いします！
- スタジオしまづの[学習サイト](https://d35e.uscreen.io/)：特典：Udemyを含む動画教材見放題+オンラインサロンの加入