0

配列を正しく設定していないと思いますが、実際に新しい配列値をcolor_table配列に設定する行(表示されているものの7行目と12行目である必要があります)に到達すると、「nullreferenceexception」がスローされます。下)。それが機能するようにこれをどのように書くべきですか?

public int[] colors = new int[] { 0, 255, 0, 255, 0, 255 };

private int[][] color_table;

public void setcolors()
{
    this.color_table[0] = new int[] { 0, 0, 0 };
    for (int i = 1; i <= this.precision; i++) {
        int r = (((this.colors[1] - this.colors[0]) * ((i - 1) / (this.precision - 1))) + this.colors[0]);
        int g = (((this.colors[3] - this.colors[2]) * ((i - 1) / (this.precision - 1))) + this.colors[2]);
        int b = (((this.colors[5] - this.colors[4]) * ((i - 1) / (this.precision - 1))) + this.colors[4]);
        this.color_table[i] = new int[] { r, g, b };
    }
}

配列を使用する前に、その長さで配列を初期化する必要があると聞いたことがありますが、a)その方法がわかりません。b)問題があるかどうかはわかりません。問題は、配列の長さがわからないことです。私はこれを無駄に試しました:

private int[this.precision][3] color_table;

ありがとう!

4

2 に答える 2

3

this.color_table初期化されていません。したがって、それに値を割り当てることはできません。

あなたはこのようなことを意味しましたか?

public void setcolors()
{
    color_table = new int[precision + 1][];
    for (int i = 1; i <= this.precision; i++)
    {
        int r = (((this.colors[1] - this.colors[0]) * ((i - 1) / (this.precision - 1))) + this.colors[0]);
        int g = (((this.colors[3] - this.colors[2]) * ((i - 1) / (this.precision - 1))) + this.colors[2]);
        int b = (((this.colors[5] - this.colors[4]) * ((i - 1) / (this.precision - 1))) + this.colors[4]);
        this.color_table[i] = new int[] { r, g, b };
    }
}
于 2012-12-28T08:23:10.760 に答える
0

配列の長さがわからない場合は、listを使用してみてください

    List<int[]> color_table = new List<int[]>();
...
    color_table.Add(new int[] { r, g, b });
于 2012-12-28T08:29:35.107 に答える