我有一個'int[][]
'的數組,代表了小網格的座標。每個座標都被賦予了自己的價值。例如array[0][4] = 28
......Java int [] []數組 - 迭代和查找值
我有兩個問題。首先,我如何遍歷所有存儲的值。其次,我希望能夠輸入一個值並在返回的網格中有其特定的座標。什麼是最好的方法來解決這個問題?
謝謝你的幫助!
我有一個'int[][]
'的數組,代表了小網格的座標。每個座標都被賦予了自己的價值。例如array[0][4] = 28
......Java int [] []數組 - 迭代和查找值
我有兩個問題。首先,我如何遍歷所有存儲的值。其次,我希望能夠輸入一個值並在返回的網格中有其特定的座標。什麼是最好的方法來解決這個問題?
謝謝你的幫助!
您可與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
}
}
第一個版本將是在「尋找座標」的問題最簡單的解決方案 - 只需檢查內部循環中的值是否正確。
迭代的值,用循環:
int[][] matrix
//...
for(int row[] : matrix)
for(int cell : row){
//do something with cell
}
訪問基於你需要某種雙重的HashMap的(看起來在java.util.HashMap中)的價值座標,但我知道沒有這樣做直接
除非你的網格以某種方式排序,那麼你可能不會比蠻力搜索做得更好。
對於迭代,我認爲這將是這樣的(語法可能會關閉了一下,我還沒有處理的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
}
}
搜索你會可能需要使用它來迭代,然後一旦找到它就返回。
如果您可能會多次查找相同值的位置,那麼您可能需要使用哈希表來記憶結果。
遍歷網格中的所有元素試試這個:
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
}
}
有一般沒有辦法找到特定值的具體座標,除了通過數組去和尋找它。但是,如果數組中的值保證是唯一的(即每個值只出現在一個單元格中),則可以將一個單獨的數組保存爲索引,該索引存儲由該值索引的每個值的座標。
使用嵌套for循環遍歷x和y維度,它可以讓您遍歷每個值,一次一個。
對於輸入一個值,只要按照上面的方法進行操作即可,但要查找與所請求的值匹配的值。
如果您將所有這些集合都封鎖在單個類中,並且不以任何方式公開它們,您將會感到高興。
這意味着將您的搜索和查找例程也移到這個類中。
對於存儲,每個人都覆蓋迭代,添加散列表和查找。我把這個評論發表在nickolai的帖子上:
將新的Integer(ix + iy * 1000)存儲爲散列表中的值。如果你的y指數可以超過1000,那麼使用更大的數字 - 整數非常大。要獲取它,請使用ix = val%1000,iy = val/1000。
如果你的數組和哈希表被封裝在同一個類中,那麼你的代碼的其餘部分將非常容易編寫,並且更加簡潔。
如果這是家庭作業,你應該清楚這一點(除了使用作業標籤)。 – 2009-01-23 22:12:14