2010-12-08 27 views
18

C#で実行されるクラスの割り当てがあります。完全なC#初心者で、私は最初にJavaでプロジェクトを行いましたが、現在はC#に変換しようとしています。次のコンパイラエラーが発生する次の関数があります。コンパイラエラー:無効なランク指定子:2次元配列の初期化で '、'または ']'が返される

エラー:無効ランク指定子:予想 '' または ']' 次の行に

int[][] grid=new int[g.cols][g.rows]; 

Visual Studioが

public int[][] getConvergenceCounts(MandelbrotGrid g){ 
    int[][] grid=new int[g.cols][g.rows]; 

    for(int x=0;x<g.cols;x++){ 
    for(int y=0;y<g.rows;y++){ 
     double tx=x*(double)3/400-1.5; 
     double ty=y*(double)3/400-1.5; 
     grid[x][y]=getConvergenceCount(new Complex(ty,tx)); 
    } 
    } 

    return grid; 
} 

g.rowsにグラムを強調されたI私がここで間違って何をしているのか分かりませんし、C#で多次元配列を読み上げることは助けに見えませんでした。

+0

あなたは '新しいint型[g.colsのようなものを必要とするだろう。その場合には、真の多次元配列(、g.rowsをしたいですか] ')や配列の配列(' new int [] [g.cols] 'の後ろにループが必要なもの)が必要ですか? –

+0

私は本当の多次元配列が必要です。 – Vaheh

答えて

33

jagged arrayを宣言して間違っているとC#コンパイラは考えています。ギザギザの配列は、配列のの配列であり、メイン配列内に含まれる各配列は異なる数の要素を持つことができます。次のようにジャグ配列を宣言されています。その中に整数の「numElements」の配列を保持することができ、配列を作成します

int[][] jaggedArray = new int[numElements][]; 

あなたは例えば、multidimensional arrayを宣言したい:

int[,] grid = new int[g.cols, g.rows]; 
+0

答えをありがとう。しかし、これは別の方法を破っているようだ。私は二次元配列を反復するループを入れ子にしました。 for(int y = 0; y Vaheh

+5

最初の次元(x)にgrid.GetLength(0)を使用し、2番目の(y)にgrid.GetLength(1)を使用できます。 – TheEvilPenguin

+0

ありがとう、これは完全に動作します。 – Vaheh

2
public int[][] getConvergenceCounts(MandelbrotGrid g){ 
    int[][] grid=new int[g.cols][]; 

    for(int x=0;x<g.cols;x++){ 
    int[x] = new int[g.rows] 
    for(int y=0;y<g.rows;y++){ 
     double tx=x*(double)3/400-1.5; 
     double ty=y*(double)3/400-1.5; 
     grid[x][y]=getConvergenceCount(new Complex(ty,tx)); 
    } 
    } 

    return grid; 
} 
関連する問題