Pregunta

Tengo una matriz en forma de ' int [] [] ' que representa las coordenadas de una cuadrícula pequeña. A cada coordenada se le ha asignado su propio valor. por ejemplo, array [0] [4] = 28 ......

Tengo dos preguntas. En primer lugar, ¿cómo itero a través de todos los valores almacenados? En segundo lugar, deseo poder ingresar un valor y tener sus coordenadas específicas en la cuadrícula devueltas. ¿Cuál sería la mejor manera de abordar esto?

¡Gracias por cualquier ayuda!

¿Fue útil?

Solución

Puede iterar con bucles for o bucles mejorados:

for (int row=0; row < grid.length; row++)
{
    for (int col=0; col < grid[row].length; col++)
    {
        int value = grid[row][col];
        // Do stuff
    }
}

o

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

La primera versión sería la solución más fácil para " encontrar las coordenadas " pregunta: solo verifique si el valor en el bucle interno es correcto.

Otros consejos

para iterar sobre los valores use bucles:

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

para acceder a las coordenadas en función del valor, necesitaría algún tipo de doble hashmap (consulte java.util.HashMap) pero no tengo conocimiento de nada que lo haga directamente

Para iterar sobre todos los elementos de la cuadrícula, intente esto:

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

A menos que su cuadrícula esté ordenada de alguna manera, entonces probablemente no le irá mejor que una búsqueda de fuerza bruta.

Para iterar, creo que sería algo como esto (la sintaxis podría estar un poco apagada, no he tratado con matrices en Java por un tiempo):

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

Para buscar, probablemente necesite usar eso para iterar, luego regresar una vez que lo haya encontrado.

Si puede estar buscando la posición del mismo valor varias veces, es posible que desee memorizar los resultados utilizando una tabla hash.

Use bucles anidados para iterar sobre las dimensiones xey, lo que le permite revisar cada valor, uno a la vez.

Para ingresar un valor, simplemente haga lo mismo que antes, pero busque una coincidencia con el valor solicitado.

Serás más feliz si bloqueas todas estas colecciones dentro de una sola clase y no las expones de ninguna manera.

Esto significa mover sus rutinas de búsqueda y búsqueda también a esta clase.

Para el almacenamiento, la iteración está cubierta por todos, agregue una tabla hash y una búsqueda. Puse este comentario en la publicación de nickolai:

Almacene un nuevo entero (ix + iy * 1000) como el valor en su tabla hash. Si su índice y puede superar los 1000, use un número mayor: las entradas son realmente grandes. Para recuperarlo, use ix = val% 1000, iy = val / 1000.

Si su matriz y tabla hash están encapsulados en la misma clase, el resto de su código será bastante fácil de escribir y mucho más limpio.

Por lo general, no hay forma de encontrar las coordenadas específicas de un valor particular, excepto yendo a través de la matriz y buscándola. Sin embargo, si se garantiza que los valores de la matriz sean únicos (es decir, cada valor solo aparece en una celda), puede mantener una matriz separada como índice, que almacena las coordenadas de cada valor indexado por el valor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top