9

int[][]小さなグリッドの座標を表す' ' の形式の配列があります。各座標には独自の値が割り当てられています。例array[0][4] = 28……

2 つの質問があります。まず、保存されているすべての値をどのように反復処理しますか。次に、値を入力して、グリッド内の特定の座標を返すことができるようにしたいと考えています。これにアプローチする最良の方法は何ですか?

助けてくれてありがとう!

4

7 に答える 7

28

forループまたは拡張forループのいずれかで反復できます。

for (int row=0; row < grid.length; row++)
{
    for (int col=0; col < grid[row].length; col++)
    {
        int value = grid[row][col];
        // Do stuff
    }
}

また

// Note the different use of "row" as a variable name! This
// is the *whole* row, not the row *number*.
for (int[] row : grid)
{
    for (int value : row)
    {
         // Do stuff
    }
}

最初のバージョンは、「座標を見つける」質問に対する最も簡単な解決策です。内側のループの値が正しいかどうかを確認するだけです。

于 2009-01-23T20:54:12.300 に答える
4

値を反復処理するには、ループを使用します。

 int[][] matrix   
 //...
 for(int row[] : matrix)
     for(int cell : row){
      //do something with cell
    }

値に基づいて座標にアクセスするには、ある種のダブルハッシュマップ(java.util.HashMapを参照)が必要ですが、直接アクセスするものは何もありません。

于 2009-01-23T20:52:39.260 に答える
2

グリッド内のすべての要素を反復処理するには、次のことを試してください。

int grid[][] = new int[10][10];

for(int i = 0; i < grid.length(); ++i) {
    for(int j = 0; j < grid[i].length(); ++j) {
        // Do whatever with grid[i][j] here
    }
}
于 2009-01-23T20:53:06.250 に答える
1

グリッドが何らかの方法でソートされていない限り、ブルートフォース検索よりも優れた方法はおそらくありません。

反復する場合は、次のようになると思います(構文が少しずれている可能性があります。しばらくの間、Javaで配列を処理していません)。

int[][] grid;  // just assuming this is already assigned somewhere

for(int x = 0 ; x < grid.length ; x++) {
  int[] row = grid[x];
  for(int y = 0 ; y < row.length ; y++) {
    int value = row[y];
    // Here you have the value for grid[x][y] and can do what you need to with it
  }
}

検索の場合は、おそらくそれを使用して反復し、見つかったら戻る必要があります。

同じ値の位置を複数回検索している可能性がある場合は、ハッシュテーブルを使用して結果をメモ化することをお勧めします。

于 2009-01-23T20:52:46.937 に答える
0

ネストされたforループを使用して、x次元とy次元を反復処理します。これにより、各値を一度に1つずつ調べることができます。

値を入力するには、上記と同じようにしますが、要求された値に一致するものを探します。

于 2009-01-23T20:53:31.973 に答える
0

これらのコレクションをすべて1つのクラス内でブロックし、それらを公開しないようにすると、最も幸せになります。

これは、検索ルーチンとルックアップルーチンもこのクラスに移動することを意味します。

ストレージについては、誰もが繰り返し、ハッシュテーブルとルックアップを追加します。私はこのコメントをnickolaiの投稿に載せました:

新しいInteger(ix + iy * 1000)を値としてハッシュテーブルに格納します。yインデックスが1000を超える可能性がある場合は、より大きな数を使用します。intは非常に大きくなります。それを取り戻すには、ix = val%1000、iy = val/1000を使用します。

配列とハッシュテーブルが同じクラスにカプセル化されている場合、残りのコードは非常に簡単に記述でき、非常にクリーンになります。

于 2009-01-23T21:32:01.053 に答える
-1

一般に、配列を調べて検索する以外に、特定の値の特定の座標を見つける方法はありません。ただし、配列内の値が一意であることが保証されている場合(つまり、各値が1つのセルでのみ発生する場合)、値によってインデックス付けされた各値の座標を格納するインデックスとして個別の配列を維持できます。

于 2009-01-23T20:53:27.730 に答える