Question

J'ai un tableau sous la forme ' int [] [] ' qui représente les coordonnées d'une petite grille. Chaque coordonnée a reçu sa propre valeur. Par exemple, array [0] [4] = 28 ......

J'ai deux questions. Premièrement, comment puis-je parcourir toutes les valeurs stockées? Deuxièmement, je veux pouvoir entrer une valeur et obtenir ses coordonnées spécifiques dans la grille. Quelle serait la meilleure façon d’aborder cela?

Merci pour toute aide!

Était-ce utile?

La solution

Vous pouvez effectuer une itération avec les boucles for ou améliorée pour les boucles:

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

La première version serait la solution la plus simple pour trouver les coordonnées "trouver les coordonnées". question - vérifiez si la valeur de la boucle interne est correcte.

Autres conseils

pour parcourir les valeurs, utilisez les boucles:

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

pour accéder aux coordonnées en fonction de la valeur, vous aurez besoin d'une sorte de double hashmap (regardez java.util.HashMap) mais je ne suis au courant de rien qui le fasse directement

Pour parcourir tous les éléments de la grille, essayez ceci:

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

À moins que votre grille ne soit triée d'une manière ou d'une autre, vous ne ferez probablement pas mieux qu'une recherche en force brute.

Pour les itérations, je pense que ce serait quelque chose comme ceci (la syntaxe est peut-être un peu fausse, je n'ai pas traité de tableaux en java depuis un moment.):

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

Pour effectuer une recherche, vous devrez probablement l'utiliser pour effectuer une itération, puis revenir une fois que vous l'avez trouvée.

Si vous recherchez plusieurs fois la position de la même valeur, vous voudrez peut-être mémoriser les résultats à l'aide d'une table de hachage.

Utilisez des boucles for imbriquées pour effectuer une itération sur les dimensions x et y, ce qui vous permet de passer en revue chaque valeur, une à la fois.

Pour saisir une valeur, procédez comme ci-dessus, mais recherchez une correspondance avec la valeur demandée.

Vous serez plus heureux si vous bloquez toutes ces collections dans une même classe sans les exposer de quelque manière que ce soit.

Cela implique de déplacer également vos routines de recherche et de recherche dans cette classe.

Pour le stockage, tout le monde a parcouru les itérations, ajoutez une table de hachage et une recherche. Je mets ce commentaire sur le post de nickolai:

Stockez le nouvel entier (ix + iy * 1000) en tant que valeur dans votre table de hachage. Si votre indice y peut dépasser 1 000, utilisez un plus grand nombre - les ints sont vraiment gros. Pour le récupérer, utilisez ix = val% 1000, iy = val / 1000.

Si votre tableau et votre table de hachage sont encapsulés dans la même classe, le reste de votre code sera assez facile à écrire et beaucoup plus propre.

Il n'y a généralement aucun moyen de trouver les coordonnées spécifiques d'une valeur particulière, sauf en parcourant le tableau et en le recherchant. Cependant, s'il est garanti que les valeurs du tableau sont uniques (c'est-à-dire que chaque valeur n'apparaît que dans une cellule), vous pouvez conserver un tableau séparé en tant qu'index, qui stocke les coordonnées de chaque valeur indexée par la valeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top