Cet article décrit la mise en œuvre Java de la sortie d'une fonction de matrice numérique dans le sens horaire ou dans le sens antihoraire. Partagez-le pour votre référence, comme suit:
Sujet: Imprimez une matrice numérique à partir de 1 de l'extérieur vers le coin supérieur gauche en fonction de la longueur et de la largeur et de la direction de sortie spécifiées. La figure suivante
Le code et les commentaires sont les suivants:
classe publique NumberMatrix {public static void main (String [] args) {int width = 25; int hauteur = 12; booléen dans le sens horaire = false; System.out.println ("Wulin.com Résultats du test:"); OutputMatrix (largeur, hauteur, dans le sens horaire); } / ** * Imprimez une matrice numérique à partir de 1 de l'extérieur vers l'intérieur en fonction de la longueur et de la largeur et de la direction de sortie spécifiées, et la position de départ de la matrice est dans le coin supérieur gauche. * * @Param Largeur Matrix Largeur * @param Hight Matrix Hight * @param dans le sens horaire si elle est dans le sens des aiguilles d'une montre * / private static void OutputMatrix (Int Width, int hauteur, booléen dans le sens des aiguilles d'une montre) {// Juge d'abord le nombre de digits du plus grand nombre pour déterminer comment la sortie est alignée int numLength = (int) Math.log10 (width * height) + 1; // Déterminez le format de la sortie (nombre maximum de chiffres + 1 espace) Format de chaîne = "%" + (numLength + 1) + "d"; // Définissez le tableau bidimensionnel à sortir, notez que les dimensions sont de haut à faible // À l'heure actuelle, la matrice Les valeurs de tous les éléments y sont 0 int [] [] matrice = new int [hauteur] [largeur]; // Définissez un pointeur de position et un compteur, le pointeur de position est déplacé et le compteur est responsable de l'incrémentation. Le nombre incrémenté // est rempli dans la matrice. Lorsque la largeur * Les numéros de hauteur sont remplis, cette matrice est terminée. // Notez que le premier élément du pointeur de position ici correspond à la première dimension y de la matrice, et le deuxième élément correspond à la deuxième dimension x. int [] pointer = {0, 0}; int compteur = 1; // Définissez la direction actuelle du mouvement: 1, 2, 3 et 4 représentent respectivement le haut, la droite, la droite et la gauche. // La direction de démarrage dans le sens horaire est droite et la direction de départ dans le sens antihoraire est inférieure. Int Direction = dans le sens des aiguilles d'une montre? 2: 3; // Démarrage de la boucle, chaque remplissage est de trois étapes pour (int i = 1, max = largeur * hauteur; i <= max; i ++) {// 1. Contenu de remplissage int y = pointeur [0]; int x = pointeur [1]; matrice [y] [x] = compteur; // 2. Le compteur est incrémenté par compteur + = 1; // 3. Passez à la position suivante, car cet endroit est plus compliqué, ouvrez une méthode pour implémenter Direction = Move (matrice, largeur, hauteur, pointeur, direction, dans le sens horaire); } // Une fois la matrice remplie, vous pouvez faire boucle la sortie de la manière normale pour (int y = 0; y <hauteur; y ++) {pour (int x = 0; x <width; x ++) {System.out.printf (format, matrice [y] [x]); } System.out.println (); // La rupture de la ligne de sortie après une ligne est terminée}} / ** * Move * * @param Matrix Matrix dans la matrice, utilisée pour déterminer si la position suivante dans la direction avant a été remplie de nombres. If so, turn to * @param width Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix, if so, turn to * @param width Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrice matrice matrice matrice matrice matrice matrice matrice matrice matrice matrice matrice matrice matrice matrice matrice matrice matrice de la valeur à l'intérieur changera après avoir appelé cette méthode ou différent de la direction d'origine). Si vous ne pouvez pas continuer à déplacer, retournez 0 * / private static int move (int [] [] matrice, int largeur, int hauteur, int [] pointeur, direction int, booléen dans le sens horaire) {// essayez de passer à newpointer int [] newpointer = moléctly (pointeur, direction); // Vérifiez si le NewPointer est légal. Si légal, affectez-le au pointeur et maintenez la direction d'origine. La méthode est terminée if (isValid (newpointer, matrice, largeur, hauteur)) {System.ArrayCopy (newPointer, 0, pointeur, 0, 2); direction de retour; } // Tournez et déplacez-vous à nouveau du pointeur dans une nouvelle direction de direction = tour (direction, dans le sens des aiguilles d'une montre); newPointer = motimectly (pointeur, direction); // Vérifiez si NewPointer est légal (comme avant) if (isValid (newpointer, matrice, largeur, hauteur)) {System.ArrayCopy (newPointer, 0, Pointer, 0, 2); direction de retour; } // Vous ne pouvez pas avancer ou tourner, vous ne pouvez donc pas continuer à vous déplacer. retour 0; } // Déterminez si la position spécifiée dans la matrice peut être remplie de booléen statique privé Isvalid (int [] newpointer, int [] [] Matrix, int largeur, int hauteur) {// La position ne peut pas dépasser la plage de matrice if (newpointer [0]> = hauteur || newpointer [0] <0 || newpointer [1]> = width || NewPointer [1] [NewPointer [1]> = largeur || retourne false; } // Le contenu de la position doit être vide if (matrix [newPointer [0]] [newPointer [1]]! = 0) {return false; } return true; } // Steer. Selon notre définition de la direction, dans le sens horaire est +1, dans le sens antihoraire est -1 -1 private static int tour (direction int, booléen dans le sens horaire) {int newDirection = dans le sens horaire? Direction + 1: Direction - 1; if (newDirection> 4) {newDirection = 1; } else if (newDirection <1) {newDirection = 4; } return newDirection; } / ** * Déplacez-vous dans la direction spécifiée et revenez à la nouvelle position * * @param position de courant du pointeur * @param Direction de direction * * @return Nouvelle position * / private static int [] MoveRectly (int [] pointer, int direction) {int y = pointeur [0]; int x = pointeur [1]; switch (direction) {cas 1: return new int [] {y - 1, x}; Cas 2: renvoie nouveau int [] {y, x + 1}; Cas 3: renvoie nouveau int [] {y + 1, x}; Cas 4: renvoie nouveau int [] {y, x - 1}; } Jetez un nouveau IllégalArgumentException ("Direction incorrecte:" + Direction); }}Résultats en cours:
Pour plus d'informations sur les algorithmes Java, les lecteurs qui sont intéressés par ce site peuvent afficher les sujets: "Structure de données Java et didacticiel d'algorithme", "Résumé des conseils de nœud Java Operation Dom", "Résumé du fichier Java et des conseils d'opération de répertoire" et "Résumé des conseils d'opération Java Cache"
J'espère que cet article sera utile à la programmation Java de tous.