0

このコードを実行すると、次のエラーが表示されます:「型 ArrayList[] を ArrayList[][] に暗黙的に変換できません」 この行:m_grid[gridIndexX] = new ArrayList[Height];しかし、別の方法でそれを行うにはどうすればよいですか? m_grid 配列が 2 次元配列の場合は機能しますが、3 次元配列としては機能しません。ご協力ありがとうございます。

private ArrayList[][][] m_grid;
private void initialize() {
    Width           = 5;
    Height          = 5;
    Depth           = 5;
    m_grid = new ArrayList[Width][][];
}
public void Refresh(ref ArrayList particles) {

        m_grid = null;
        m_grid = new ArrayList[Width][][];

        if (particles != null) {
            for (int i = 0; i < particles.Count; i++) {
                FluidParticle p = (FluidParticle) particles[i];
                int gridIndexX = GetGridIndexX(ref p);
                int gridIndexY = GetGridIndexY(ref p);
                int gridIndexZ = GetGridIndexZ(ref p);

                // Add particle to list
                if (m_grid[gridIndexX] == null) {
                    m_grid[gridIndexX] = new ArrayList[Height];
                }
                if (m_grid[gridIndexX][gridIndexY][gridIndexZ] == null) {
                    m_grid[gridIndexX][gridIndexY][gridIndexZ] = new ArrayList();
                }
                m_grid[gridIndexX][gridIndexY][gridIndexZ].Add(i);
            }
        }
    }
4

3 に答える 3

1

別のインデクサーを追加する必要があります。m_grid3 次元配列として初期化しました。そのため、内部の第 1 レベルの要素m_gridはすべて 2 次元配列です。そして、これらの要素の 1 つを 1 次元配列に設定しようとしています。

m_grid[gridIndexX] = new ArrayList[Height];

上記のコードでm_grid[gridIndexX]は、 タイプがArrayList[][]であるため、タイプの不一致があります。

適切なタイプに設定する必要があります。

m_grid[gridIndexX] = new ArrayList[Height][];

これだけで問題が解決するかどうかはわかりません。なぜなら、このコードが実際に何をすべきかを見分けるのが難しいからです。(実際、コードのどの部分が配列のどの次元であるかがわからない場合は、このコードが何をすべきかを知っているかどうさえわかりません...)

于 2012-07-05T11:26:59.453 に答える
0

がありません[]。この線

m_grid[gridIndexX] = new ArrayList[Height];

する必要があります

m_grid[gridIndexX] = new ArrayList[Height][];

代わりは。

于 2012-07-05T11:26:38.427 に答える
0

サイズで初期化する必要があります。

ArrayList[][][] m_grid;

m_grid = new ArrayList[100][][];

m_grid[0] = new ArrayList[100][];

m_grid[0][0] = new ArrayList[100];

これは、コード サンプルが次のようになることを意味します。

public void Refresh(ref ArrayList particles)
{

    m_grid = null;
    m_grid = new ArrayList[Width][][];

    if (particles != null)
    {
        for (int i = 0; i < particles.Count; i++)
        {
            FluidParticle p = (FluidParticle)particles[i];
            int gridIndexX = GetGridIndexX(ref p);
            int gridIndexY = GetGridIndexY(ref p);
            int gridIndexZ = GetGridIndexZ(ref p);

            // Add particle to list
            if (m_grid[gridIndexX] == null)
            {
                m_grid[gridIndexX] = new ArrayList[Height][];
            }
            if (m_grid[gridIndexX][gridIndexY][gridIndexZ] == null)
            {
                m_grid[gridIndexX][gridIndexY][gridIndexZ] = new ArrayList();
            }
            m_grid[gridIndexX][gridIndexY][gridIndexZ].Add(i);
        }
    }
}

ただし、可能であれば、から離れることを強くお勧めしますArrayList。他のコメンターが言ったように、代わりに などの一般的な厳密に型指定されたコレクションを使用してList<T>ください。

于 2012-07-05T11:27:26.380 に答える