1

次のような構造のファイルを読み取る必要があります。

01000
00030
00500
03000
00020

そして、次のように配列に入れます。

int[,] iMap = new int[iMapHeight, iMapWidth] {
{0, 1, 0, 0, 0},
{0, 0, 0, 3, 0},
{0, 0, 5, 0, 0},
{0, 3, 0, 0, 0},
{0, 0, 0, 2, 0},
};

うまくいけば、私がここでやろうとしていることがわかります。私はこれを行う方法が混乱していたので、SOでここに尋ねましたが、そこから得たコードはこのエラーを受け取ります:

オブジェクト参照がオブジェクト インスタンスに設定されていません。

私はこれにかなり慣れていないので、修正方法がわかりません...コードはほとんどわかりません:

protected void ReadMap(string mapPath)
{
    using (var reader = new StreamReader(mapPath))
    {
        for (int i = 0; i < iMapHeight; i++)
        {
            string line = reader.ReadLine();
            for (int j = 0; j < iMapWidth; j++)
            {
                iMap[i, j] = (int)(line[j] - '0');
            }
        }
    }
}

エラーが発生する行は次のとおりです。

iMap[i, j] = (int)(line[j] - '0');

誰でも解決策を提供できますか?

4

1 に答える 1

2

この行でStreamReader.ReadLineは、ファイルの終わりに達した場合に null を返すことができます。

string line = reader.ReadLine();

この状態を確認し、適切に処理する必要があります。

string line = reader.ReadLine();
if (line == null)
{
    // Handle the error.
}

また、入力に少なくともiMapHeight * iMapWidth行があることを確認してください。

また、配列が初期化されていることを確認する必要があります。たとえば、次の行をメソッドの先頭に追加します。

iMap = new int[iMapHeight, iMapWidth];
于 2010-05-08T23:34:26.803 に答える