新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

VS2019のC#で遊んでました。独習C#第3版P202フェイルソフトな配列

2020-03-07 09:19:26 | C#、VBなど

using System;

namespace Chapter01All
{
    // フェイルソフトな配列を使用する
    class FSDemo
    {
        class FailSoftArray
        {
            private int[] a;    // 配列への参照           ←これらがprivateである点に注意
            private int errval; // エラー時に返す値

            public int Size; // SIzeはpublic

            /* 配列のサイズとエラー時の戻り値を
               コンストラクタ引数として渡す */
            public FailSoftArray(int size, int errv)
            {
                a = new int[size]; //←privateなインスタンス変数
                errval = errv;
                Size = size;
            }

            // 与えられた添え字の位置にある要素の値を返す
            public int Get(int index)
            {
                if (ok(index)) return a[index]; //← 境界を超える添え字であるか調べる
                return errval;
            }
 
            // 与えられた添え字位置の要素に値を代入する。失敗したらfalseを返す
            public bool Put(int index, int val)
            {
                if (ok(index))
                { //← 境界を超える添え字であるか調べる
                    a[index] = val;
                    return true;
                }
                return false;
            }

            // 添え字が有効な範囲ならtrueを返す
            private bool ok(int index)
            { //←privateなメソッド
                if (index >= 0 & index < Size) return true;
                return false;
            }
        }

        static void Main()
        {
            FailSoftArray fs = new FailSoftArray(5, -1);
            int x;

            // エラーを表示する
            Console.WriteLine("\nFail with error reports.");
            for (int i = 0; i < (fs.Size * 2); i++)
                if (!fs.Put(i, i * 10))
                    Console.WriteLine("Index " + i + " out-of-bounds");

            for (int i = 0; i < (fs.Size * 2); i++)
            {
                x = fs.Get(i);
                if (x != -1) Console.WriteLine(x + " ");
                else
                    Console.WriteLine("Index " + i + " out-of-bounds");
            }
        }
    }
}


 配列には下限と上限があるので、そこを超えて、代入とか読み取りはできません。当たり前と言ってしまえばその通り?です。例えば配列の大きさが5とすると、アクセスする時の添え字は基本は0から4です。上のコードでも0から始まっています。自分は良く、実行時エラーで境を超えているエラーが出ます。これは良くない書き方だと最近の言語では、使わないようにと、言ってます。((+_+))


using System;

namespace Chapter01All
{
    class LoopTest
    {
        public static void Main()
        {
            int[] ary = { 0, 1, 2, 3, 4, 5 };
            foreach (int a in ary)
                Console.WriteLine(a);

            Console.WriteLine("==========================");

            for (int i = 0; i < ary.Length; i++)
                Console.WriteLine(ary[i]);
        }
    }
}


上の部分で言えば、foreachを使える方が良いと言っているようです。確かにint iは使いませんから。


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« VS2019のC#で遊んでました。M... | トップ | VS2019,独習C#第3版P262イン... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

C#、VBなど」カテゴリの最新記事