我有一个'int[][]
'形式的数组,代表一个小网格的坐标。每个坐标都被赋予了自己的价值。例如array[0][4] = 28
......
我有两个问题。首先,如何遍历所有存储的值。其次,我希望能够输入一个值并在网格中返回其特定的坐标。什么是最好的方法来解决这个问题?
感谢您的帮助!
答案 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)
除了通过数组并搜索它之外,通常无法找到特定值的特定坐标。但是,如果数组中的值保证是唯一的(即每个值仅出现在一个单元格中),则可以将单独的数组维护为索引,该索引存储由该值索引的每个值的坐标。