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: de sorte que le voisin de (1,0) devrait être = a b e s a.
Actuellement, j'ai ce qui suit: p> 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. fort> p> p> p>
4 Réponses :
La raison pour laquelle vous n'obtenez pas les diagonales de votre groupe actuel est ce second 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. p> est équivalent à p> Et pour vous, si code> instruction. Vous devez couvrir, par exemple, (2, 1) code> qui est quand xx code> est 1 code> et yy code> est 1 code>. Mais ABS (1) + ABS (1) = 2 code> et 2> 1 code>, de sorte que vous n'incluez pas. expression code> (en pseudocode) est non (xx = 0 et yy = 0) et isOnmap (xx, yy) code> p> p> p> p> p> p> p> P> P>
Il suffit de supprimer la seconde si la déclaration. Qu'est-ce que c'est censé faire?
Les diagonales ne sont pas incluses à cause de ce code: quand il est sur le diagonal math.abs (xx) == 1 && math.abs (yy) = = 1 code>. Donc, leur somme sera supérieure à 1. Vous sautez sur les diagonales en ayant ce code ici. P> p>
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]);
}
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 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 iSOnmap code> comme ci-dessous: 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]);
}
}
}
}
}
ABESA code> serait les voisins dud code> au(x, y) = (0,1) code>, pas leB Code> à(1,0) code>, n'est-ce pas?