我有一个 ' ' 形式的数组,int[][]
它代表一个小网格的坐标。每个坐标都被分配了自己的值。例如array[0][4] = 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
}
}
第一个版本将是“查找坐标”问题的最简单解决方案 - 只需检查内部循环中的值是否正确。
迭代值使用循环:
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 维度,这样您就可以遍历每个值,一次一个。
要输入一个值,只需执行与上述相同的操作,但要查找与您请求的值匹配的值。
如果您在单个类中阻止所有这些集合并且不以任何方式公开它们,您会很高兴。
这意味着将您的搜索和查找例程也移动到此类中。
对于存储,每个人都涵盖了迭代、添加哈希表和查找。我在 nickolai 的帖子上发表了这条评论:
将 new Integer(ix + iy * 1000) 存储为哈希表中的值。如果您的 y 索引可以超过 1000,请使用更大的数字——整数真的很大。要取回它,请使用 ix=val%1000, iy=val/1000。
如果您的数组和哈希表封装在同一个类中,那么您的其余代码将非常容易编写并且更加简洁。
通常没有办法找到特定值的特定坐标,除非通过数组并搜索它。但是,如果保证数组中的值是唯一的(即每个值只出现在一个单元格中),您可以维护一个单独的数组作为索引,它存储由该值索引的每个值的坐标。