Java int [] [] array - 迭代并查找值

时间:2009-01-23 20:47:21

标签: java arrays iteration

我有一个'int[][]'形式的数组,代表一个小网格的坐标。每个坐标都被赋予了自己的价值。例如array[0][4] = 28 ......

我有两个问题。首先,如何遍历所有存储的值。其次,我希望能够输入一个值并在网格中返回其特定的坐标。什么是最好的方法来解决这个问题?

感谢您的帮助!

7 个答案:

答案 0 :(得分:23)

您可以使用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
    }
}

第一个版本是“查找坐标”问题的最简单解决方案 - 只需检查内循环中的值是否正确。

答案 1 :(得分:3)

迭代值使用循环:

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

根据你需要某种双重hashmap的值来访问坐标(看一下java.util.HashMap)但我知道没有直接这样做

答案 2 :(得分:2)

要迭代网格中的所有元素,请尝试以下方法:

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

答案 3 :(得分:1)

除非您的网格以某种方式排序,否则您可能不会比强力搜索更好。

对于迭代,我认为它会是这样的(语法可能有点偏差,我还没有在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
  }
}

对于搜索,您可能需要使用它进行迭代,然后在找到后返回。

如果您可能多次查找相同值的位置,那么您可能希望使用哈希表来记忆结果。

答案 4 :(得分:0)

使用嵌套for循环迭代x和y维度,这样您就可以一次查看每个值。

要输入值,请执行与上述相同的操作,但要查找与您请求的值匹配的内容。

答案 5 :(得分:0)

如果您在一个类中阻止所有这些集合并且不以任何方式公开它们,那么您将会感到最开心。

这意味着将搜索和查找例程也移动到此类中。

对于存储,每个人都需要迭代,添加哈希表和查找。我把这个评论放在了尼古拉的帖子上:

将新的整数(ix + iy * 1000)存储为哈希表中的值。如果您的y指数可以超过1000,请使用更大的数字 - 整数非常大。为了得到它,使用ix = val%1000,iy = val / 1000。

如果您的数组和哈希表封装在同一个类中,那么代码的其余部分将非常容易编写并且更加清晰。

答案 6 :(得分:-1)

除了通过数组并搜索它之外,通常无法找到特定值的特定坐标。但是,如果数组中的值保证是唯一的(即每个值仅出现在一个单元格中),则可以将单独的数组维护为索引,该索引存储由该值索引的每个值的坐标。