Java int [] []配列-値の反復と検索
質問
小さなグリッドの座標を表す「int[][]
」形式の配列があります。各座標には独自の値が割り当てられています。例array[0][4] = 28
......
2つの質問があります。まず、保存されているすべての値を反復処理する方法を教えてください。次に、値を入力し、グリッド内の特定の座標を返すことができるようにしたいです。これにアプローチする最良の方法は何ですか?
ご協力ありがとうございます!
解決
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
}
}
最初のバージョンは、<!> quot;座標を見つける<!> quot;の最も簡単な解決策です。質問-内側のループの値が正しいかどうかを確認してください。
他のヒント
値を反復処理するにはループを使用します:
int[][] matrix
//...
for(int row[] : matrix)
for(int cell : row){
//do something with cell
}
値に基づいて座標にアクセスするには、ある種のダブルハッシュマップが必要になります(java.util.HashMapを参照)が、直接そうするものは何もありません
グリッド内のすべての要素を反復処理するには、これを試してください:
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
}
}
グリッドが何らかの方法で並べ替えられない限り、おそらく総当たり検索よりも良い結果は得られません。
反復処理では、このようなものになると思います(構文は少しずれているかもしれません。しばらくの間、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
}
}
検索の場合、おそらくそれを使用して反復する必要があり、見つかったら戻る必要があります。
同じ値の位置を複数回検索する場合は、ハッシュテーブルを使用して結果をメモすることをお勧めします。
ネストされたforループを使用して、x次元とy次元を反復処理します。これにより、各値を1つずつ調べることができます。
値を入力するには、上記と同じようにしますが、要求された値と一致するものを探します。
これらのすべてのコレクションを単一のクラス内でブロックし、それらを一切公開しない場合が最も幸せです。
これは、検索および検索ルーチンもこのクラスに移動することを意味します。
ストレージについては、全員が繰り返し処理を行い、ハッシュテーブルとルックアップを追加します。このコメントをnickolaiの投稿に付けました:
ハッシュテーブルの値として新しいInteger(ix + iy * 1000)を保存します。 yインデックスが1000を超える可能性がある場合は、より大きな数を使用してください。intは本当に大きいです。元に戻すには、ix = val%1000、iy = val / 1000を使用します。
配列とハッシュテーブルが同じクラスにカプセル化されている場合、コードの残りの部分は非常に簡単に記述でき、よりクリーンになります。
特定の値の特定の座標を見つける方法は、通常、配列を調べて検索する以外にはありません。ただし、配列内の値が一意であることが保証されている場合(つまり、各値は1つのセルでのみ発生する)、値としてインデックス付けされた各値の座標を格納するインデックスとして別の配列を維持できます。