web-dev-qa-db-ja.com

Java int [] []配列-反復して値を見つける

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

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

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

8
Tray

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
    }
}

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

25
Jon Skeet

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

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

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

3
user54579

グリッド内のすべての要素を繰り返すには、次のことを試してください。

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
    }
}
2
Kevin Loney

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

反復する場合は、次のようになると思います(構文が少しずれている可能性があります。しばらくの間、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
  }
}

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

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

1
Herms

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

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

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

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

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

0
Bill K

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

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

0
alexwood