using System;
namespace Chapter01All
{
// 改良されたフェイルソフトな配列
// インデクサを追加して、フェイルソフトな配列を改良する
class FailSoftArray
{
int[] a; // 配列への参照
public int Length; // 変数Lengthはpublic
public bool ErrFlag; // 直前の操作の結果を表すフラグ
// サイズを指定して配列を作る
public FailSoftArray(int size)
{
a = new int[size];
Length = size;
}
// FailSoftArrayオブジェクトのためのインデクサ
public int this[int index]
{ //←FailSoftArrayに対するインデクサ
// getアクセサ
get
{
if (ok(index))
{
ErrFlag = false;
return a[index];
}
else
{
ErrFlag = true;
return -1;
}
}
// setアクセサ
set
{
if (ok(index))
{
a[index] = value;
ErrFlag = false;
}
else ErrFlag = true;
}
}
// インデックスが配列の上限・下限の範囲内ならtrueを返す
private bool ok(int index)
{
if (index >= 0 & index < Length) return true;
return false;
}
}
class ImprovedFSDemo
{
public static void Main()
{
FailSoftArray[] fs = { new FailSoftArray(5), new FailSoftArray(5) };//クラスの配列
int x;
// エラーを表示
Console.Write("\nFail with error reports.");
for (int j = 0; j < fs.Length; j++)//クラスの配列の添え字を変えます
{
for (int i = 0; i < fs[j].Length; i++)//クラスの配列の要素の添え字を変えます
{
fs[j][i] = i * 10; //set 二次元の配列と同じでは?
if (fs[j].ErrFlag)
Console.Write("\nfs[" + j + "][" + i + "] out-of-bounds");
}
}
for (int j = 0; j < fs.Length; j++)
{
for (int i = 0; i < fs[j].Length; i++)
{
x = fs[j][i]; //get
Console.WriteLine();
if (!fs[j].ErrFlag)
Console.Write(x);
else
Console.Write("fs[" + j + "][" +i + "] out-of-bounds");
}
}
Console.WriteLine();
}
}
}
直観として、二次元の配列と同じく使えそうと思いました。次には、このクラスの加算をやって見たいと思います。取り敢えずは、要素の大きさを同じとして、簡単にします。要するにfs[2] = fs[0] + fs[1]と書いて、fs[2] = {0,20,40,60,80}となれば、加算したことになりますね。