我有一个表示小网格的坐标“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
    }

访问基于你需要某种双重的HashMap的价值坐标(看起来在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
  }
}

有关搜索你可能会需要使用迭代,然后返回一旦你找到了。

如果你可能会寻找了相同的值多次的位置,那么你可能想用一个哈希表来memoize的结果。

使用嵌套的for循环遍历x和y维度,它可以让您超出每一个值,一次一个

对于输入值,只是做上述相同,但寻找一个符合您的要求的值。

如果您阻止一个类里面的所有这些藏品,不以任何方式揭露他们你会是最幸福的。

这意味着移动搜索和查找例程进入这个类为好。

有关存储,每个人都覆盖迭代,添加一个散列表和查找。我把这个评论nickolai的帖子:

存储新整数(IX + IY * 1000)作为在哈希表中的值。如果你的Y索引可以去超过1000使用一个更大的数字 - 整型是真正的大。取回使用IX = VAL%1000,IY = VAL / 1000。

如果您的阵列和哈希表被封装在同一个类,您的代码的其余部分将是很容易编写和大量的清洁剂。

通常没有办法找到特定值的特定坐标除非通过阵列和去寻找它。然而,如果阵列中的值被保证是唯一的(即,每个值仅发生在一个细胞),可以维护一个单独的阵列作为指标,其存储由所述值索引的每个值的坐标。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top