Java int array – 迭代并查找值

我有一个’ int[][] ‘forms的数组,代表一个小网格的坐标。 每个坐标都被赋予了自己的价值。 例如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 } } 

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

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

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

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

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