Pergunta

Eu tenho uma matriz na forma de 'int[][]' que representa as coordenadas de uma pequena grade. Cada coordenada foi atribuído o seu próprio valor. por exemplo array[0][4] = 28 ......

Eu tenho duas perguntas. Em primeiro lugar, como faço para percorrer todos os valores armazenados. Em segundo lugar, eu quero ser capaz de introduzir um valor e ter suas coordenadas específicas na grade retornado. Qual seria a melhor maneira de abordar isso?

Obrigado por qualquer ajuda!

Foi útil?

Solução

Você pode interagir com qualquer um para loops ou melhorados para loops:

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

ou

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

A primeira versão seria a solução mais fácil para a "encontrar as coordenadas" questão -. Apenas verificar se o valor no circuito interno está correto

Outras dicas

para repetir os valores usar loops:

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

para acessar as coordenadas com base no valor que seria necessário algum tipo de duplo hashmap (olhar um na java.util.HashMap), mas eu estou ciente de nada que o faz diretamente

Para iterar sobre todos os elementos na grade tente o seguinte:

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 sua rede é classificada de alguma forma, então você provavelmente não vai fazer nada melhor do que uma busca por força bruta.

Para a iteração, eu acho que seria algo como isto (sintaxe pode ser um pouco, eu não tenho lidado com matrizes em java por um tempo.):

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 pesquisar você provavelmente precisará usar isso para iterate, em seguida, retornar uma vez que você encontrou.

Se você pode estar procurando a posição do mesmo valor várias vezes, então você pode querer memoize os resultados usando uma tabela hash.

Use aninhados loops para iterar sobre as dimensões X e Y, que lhe permite passar por cima de cada valor, um de cada vez.

Para introduzir um valor, basta fazer o mesmo que acima, mas olhar para um jogo para o seu valor solicitado.

Você será mais feliz se você bloquear todas essas coleções dentro de uma única classe e não expô-los de qualquer forma.

Isto significa avançar sua busca e rotinas de pesquisa para esta classe também.

Para o armazenamento, a iteração coberta de todos, adicionar um hashtable e uma pesquisa. Eu coloquei este comentário no post de Nickolai:

loja new Integer (ix + iy * 1000) como o valor em sua tabela hash. Se o seu índice y pode ir mais de 1000 o uso de um número maior - ints são realmente grandes. Para recuperá-lo usar ix = val% 1000, iy = val / 1000.

Se o seu array e hashtable são encapsulados na mesma classe, o resto do seu código será muito fácil de escrever e muito mais limpo.

Geralmente não há maneira de encontrar as coordenadas específicas de um determinado valor, exceto passando pelo array e procurando por ela. No entanto, se os valores na matriz são garantidos para ser único (ou seja, cada valor ocorre apenas em uma célula), você pode manter um conjunto separado como um índice, que armazena as coordenadas de cada valor indexado pelo valor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top