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は使いませんから。