Este artículo describe la implementación de Java de generar una función de matriz digital en sentido horario o en sentido antihorario. Compártelo para su referencia, como sigue:
Tema: Imprima una matriz numérica que comienza desde 1 desde el exterior hasta la esquina superior izquierda de acuerdo con la longitud especificada y el ancho y la dirección de salida. La siguiente figura
El código y los comentarios son los siguientes:
public class NumberMatrix {public static void main (string [] args) {int width = 25; int altura = 12; booleano en sentido horario = falso; System.out.println ("Wulin.com Resultados de la prueba:"); outputMatrix (ancho, altura, en sentido horario); } /*** Imprima una matriz de números que comienza desde 1 desde el exterior hasta el interior de acuerdo con la longitud especificada y el ancho y la dirección de salida, y la posición inicial de la matriz está en la esquina superior izquierda. * * @param ancho de ancho ancho * @param altura de altura de la matriz * @param en sentido horario si es en sentido horario */ privado static void outputMatrix (int width, int altura, boolean en sentido horario) {// Primero juzga el número de dígitos del número más grande para determinar cómo la salida está alineada int numlength = (int) math.log10 (width * altura) + 1; // Determinar el formato de la salida (número máximo de dígitos + 1 espacio) formato de cadena = "%" + (numlength + 1) + "d"; // Definir que la matriz bidimensional se emite, tenga en cuenta que las dimensiones son de altas a bajas // En este momento, la matriz de los valores de todos los elementos en él son 0 int [] [] matriz = new int [altura] [ancho]; // Defina un puntero de posición y un contador, el puntero de posición se mueve y el contador es responsable de incrementar. El número incrementado // se llena en la matriz. Cuando se llenan los números de altura de ancho *, esta matriz se completa. // Tenga en cuenta que el primer elemento del puntero de posición aquí corresponde a la primera dimensión y de la matriz, y el segundo elemento corresponde a la segunda dimensión x. int [] pointer = {0, 0}; int contador = 1; // Defina la dirección actual del movimiento: 1, 2, 3 y 4 representan superior, derecha, inferior y izquierda respectivamente. // La dirección de inicio en sentido horario es correcta, y la dirección de inicio en sentido antihorario es inferior. int dirección = en sentido horario? 2: 3; // Inicio de relleno de bucle, cada relleno es tres pasos para (int i = 1, max = width * altura; i <= max; i ++) {// 1. Llene contenido int y = pointer [0]; int x = puntero [1]; matriz [y] [x] = contador; // 2. El contador se incrementa por contador += 1; // 3. Muévase a la siguiente posición, porque este lugar es más complicado, abra un método para implementar la dirección = mover (matriz, ancho, altura, puntero, dirección, en sentido horario); } // Después de que se llena la matriz, puede recorrer la salida de la manera normal para (int y = 0; y <height; y ++) {for (int x = 0; x <width; x ++) {system.out.printf (format, matriz [y] [x]); } System.out.println (); // Descanso de la línea de salida después de que se complete una línea}} /** * mover * * @param matriz de matriz en la matriz, utilizada para determinar si la siguiente posición en la dirección hacia adelante se ha llenado con números. 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 Matriz matriz matriz matriz matriz matriz matriz matriz matriz matriz matriz matriz matriz matriz matriz matriz matriz matriz diferente de la dirección original). Si no puede continuar moviéndose, devuelva 0 */ private static int Move (int [] [] Matrix, int width, int altura, int [] pointer, int direction, boolean en sentido horario) {// intente moverse a newpointer int [] newPointer = MovedIrectly (pointer, dirección); // Verifique si NewPointer es legal. Si está legal, asignarlo al puntero y mantener la dirección original. El método se completa si (isValid (newPointer, matriz, ancho, altura)) {System.ArrayCopy (NewPointer, 0, Pointer, 0, 2); dirección de retorno; } // gire y muévase nuevamente del puntero en una nueva dirección de dirección = girar (dirección, en sentido horario); newPointer = MovedIrectly (puntero, dirección); // Verifique si NewPointer es legal (como antes) if (isValid (newPointer, matrix, width, altura)) {system.ArrayCopy (newPointer, 0, pointer, 0, 2); dirección de retorno; } // No puede avanzar o girar, por lo que no puede continuar moviéndose. regresar 0; } // Determine si la posición especificada en la matriz se puede llenar con un booleano estático privado isvalid (int [] newPointer, int [] [] matriz, int width, int hight) {// La posición no puede exceder el rango de matriz if (newPointer [0]> = Height || NewPointer [0] <0 || NewPointer [1]> = width || newpointer devolver falso; } // El contenido de la posición debe estar vacío if (matrix [newPointer [0]] [newPointer [1]]! = 0) {return false; } return verdadero; } // dirección. De acuerdo con nuestra definición de dirección, en sentido horario es +1, en sentido antihorario es -1 -1 privado int giro (int dirección, boolean en sentido horario) {int newDirection = en sentido horario? dirección + 1: dirección - 1; if (newDirection> 4) {newDirection = 1; } else if (newDirection <1) {newDirection = 4; } return NewDirection; } / *** Muévase en la dirección especificada y regrese a la nueva posición** @param Pointer Posición actual* @param Dirección Dirección** @return nueva posición* / private static int [] MovedEdly (int [] pointer, int dirección) {int y = puntero [0]; int x = puntero [1]; switch (dirección) {caso 1: return new int [] {y - 1, x}; Caso 2: return New int [] {y, x + 1}; Caso 3: return New int [] {y + 1, x}; Caso 4: return New int [] {y, x - 1}; } tirar nueva ilegalArgumentException ("Dirección incorrecta:" + dirección); }}Resultados de ejecución:
Para obtener más información sobre los algoritmos de Java, los lectores interesados en este sitio pueden ver los temas: "Estructura de datos Java y tutorial de algoritmo", "Resumen de las puntas de nodo de operación de Java DOM", "Resumen de Java Archivo y TIPS de operación de directorio" y "Summary of Java Cache Operation Tips" TIPS ""
Espero que este artículo sea útil para la programación Java de todos.