2009-11-30 20 views
10

は、私が持っている2次元配列

int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, index = 0; 

として1次元配列を反復処理、我々は原点からの2次元のものを作成します。しかし、どのように私は私の列インデックス行インデックス得ることができるように、私のoneDimfor (index = 0; index < 10; index++)内を反復んそこに新しいものを作成なし? 私は2次元配列(2×5)にそのインデックスを印刷している間、それは次のようになりたい:

0,0 
0,1 
1,0 
1,1 
2,0 
2,1 
3,0 
3,1 
4,0 
4,1 

私はここでの主な問題は作成せず列インデックス行インデックスを得ていると思います二次元のもの。そうでしょう?

+0

Huh? 1次元配列を2次元配列のようにしたいですか? –

+0

@Simon Righarts:これは標準です。コンパイラは毎日あなたのためにそれを行います。 – jason

+0

tomiko、あなたの問題を解決するために苦労することなく、人々があなたの質問を理解するのに苦労しているのが分かります。あなたの質問を見直して、私たちの頭脳にあなたを理解させる必要がないようにしてください。私はあなたがやろうとしていることは非常にシンプルだと確信しています。一度自分のことを明確にする時間があれば、私はあなたにいくつか意味のある助けを得るでしょう。 – pstanton

答えて

29

、式は

rowIndex * numberOfColumns + columnIndex. 
です

あなたが行rowIndex、列columnIndexを与えられ、(より良い用語の欠如のために)numberOfRow行の2次元配列を偽造され、行優先順を使用する場合は、式は

です10

ので、行優先順と仮定すると:あなたは、行優先順を想定して、あなたの式を単一forループを使用してインデックスを主張する場合

0, 0: 1 
0, 1: 2 
0, 2: 3 
0, 3: 4 
0, 4: 5 
1, 0: 6 
1, 1: 7 
1, 2: 8 
1, 3: 9 
1, 4: 10 

そして:

int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
int rows = 2; 
int columns = 5; 
for (int row = 0; row < rows; row++) { 
    for (int column = 0; column < columns; column++) { 
     System.out.println(row + ", " + column + ": " + oneDim[row * columns + column]); 
    } 
} 

出力を次のようにしてください:

int column = index % numberOfColumns; 
int row = (index - column)/numberOfColumns; 

カラムメジャーオーダーを使用している場合、必要な数式は次のとおりです。

int row = index % numberOfRows; 
int column = (index - row)/numberOfRows; 

ので、

int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
int rows = 2; 
int columns = 5; 
for(int index = 0; index < 10; index++) { 
    int column = index % columns; 
    int row = (index - column)/columns; 
    System.out.println(row + ", " + column + ": " + oneDim[index]); 
} 

意志出力予想通り

0, 0: 1 
0, 1: 2 
0, 2: 3 
0, 3: 4 
0, 4: 5 
1, 0: 6 
1, 1: 7 
1, 2: 8 
1, 3: 9 
1, 4: 10 

+0

素晴らしい!これは私が欲しいものです。ありがとう。 :D –

+1

2番目の段落の "列" - 大部分の順序を意味しましたか?何年も後に編集することを嫌い。 :-) –

8

あなたが表示している2つの数値は、表示している順に、それぞれindex/2index%2と計算できます。それはあなたが「問題」の意味ですか?

+0

大丈夫、それは「問題」です!ありがとう。 :D –

2

私はこれがあなたの試みであると思います... 1次元配列を2次元配列に変換してください。あなたは行優先順、与えられた行rowIndex、列columnIndexをしたいとnumberOfColumns列の2次元配列(より良い用語の欠如のために)偽造されている場合

//this is just pseudo code...not real syntax 

int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 

int first_dim = 5; 
int second_dim = 2; 

int[first_dim][second_dim] new_array; 

for (int fdi = 0; fdi < first_dim; fdi++){ 
    for (int sdi = 0; sdi < second_dim; sdi++) { 

     //this is the crux...you're calculating the one dimensional index to access the value 

     new_array[fdi][sdi] = oneDim[fdi*second_dim + sdi] 

    } 
}