0
votes

Comment obtenir tous les voisins voisins d'un point dans un tableau 2D?

J'essaie d'obtenir tous les voisins d'une combinaison de simples chaînes de caractères dans un tableau 2D. Signification, ma sortie ressemble à ceci actuellement dans un 3x5: xxx

de sorte que le voisin de (1,0) devrait être = a b e s a. Actuellement, j'ai ce qui suit: xxx

Cependant, il ne fait que retourner un e A A dans l'exemple que j'ai fourni. (Il ne renvoie pas ceux qui ne retournent pas les sages croisés) Quel est le bon code pour le faire fonctionner? Notez que l'entrée ne sera pas toujours 3 x 5. Cela peut être une combinaison différente de x et y s.


1 commentaires

ABESA serait les voisins du d au (x, y) = (0,1) , pas le B à (1,0) , n'est-ce pas?


4 Réponses :


0
votes

La raison pour laquelle vous n'obtenez pas les diagonales de votre groupe actuel est ce second si instruction. Vous devez couvrir, par exemple, (2, 1) qui est quand xx est 1 et yy est 1 . Mais ABS (1) + ABS (1) = 2 et 2> 1 , de sorte que vous n'incluez pas.

comme un exercice de refactoring, il pourrait être Un peu plus propre si vous avez l'intérieur de cela pour la boucle simplifiée à une seule conditionnelle. xxx

est équivalent à xxx

Et pour vous, expression (en pseudocode) est non (xx = 0 et yy = 0) et isOnmap (xx, yy)


1 commentaires

Il suffit de supprimer la seconde si la déclaration. Qu'est-ce que c'est censé faire?



2
votes

Les diagonales ne sont pas incluses à cause de ce code: xxx

quand il est sur le diagonal math.abs (xx) == 1 && math.abs (yy) = = 1 . Donc, leur somme sera supérieure à 1. Vous sautez sur les diagonales en ayant ce code ici.


0 commentaires

0
votes

dans une boucle, le mot clé continuer em> signifie que vous allez passer à la prochaine itération de la boucle. Dans votre cas, vous avez:

            if (Math.abs(xx) + Math.abs(yy) > 1) {
                continue;
            }
            if (isOnMap(x + xx, y + yy)) {
                System.out.println(grid[x+xx][y+yy]);
            }


0 commentaires

0
votes

Si vous souhaitez utiliser des tableaux 2D avec un nombre variable de lignes et de colonnes, vous devez les transmettre en tant que paramètres de votre iSOnmap code> comme ci-dessous: xxx pré>

vous Peut gérer les cas spéciaux de votre matrice 2D (lorsque l'une ou l'autre rouge et la colonne de votre élément sont égaux à 0) Réécrivez votre GetNeighborsOpoint Code> Méthode de cette manière: P>

public static void getNeighborsOfPoint(int x, int y, char[][] grid) {
    final int length = grid.length;
    final int width = grid[0].length;

    if (isOnMap(x, y, length, width)) {

        for (int i = Math.max(0, x - 1); i < Math.min(length, x + 2); ++i) {
            for (int j = Math.max(0, y - 1); j < Math.min(width, y + 2); ++j) {

                if (i != x || j != y) {
                    System.out.println(grid[i][j]);
                }
            }
        }
    }
}


0 commentaires