Este artigo descreve a implementação Java da saída de uma função de matriz digital no sentido horário ou anti -horário. Compartilhe -o para sua referência, como segue:
Tópico: Imprima uma matriz numérica a partir de 1 do lado de fora ao canto superior esquerdo, de acordo com o comprimento especificado e a direção da largura e da saída. A figura a seguir
O código e os comentários são os seguintes:
classe pública numberMatrix {public static void main (string [] args) {int width = 25; int altura = 12; booleano no sentido horário = false; System.out.println ("Wulin.com Resultados dos testes:"); outputMatrix (largura, altura, no sentido horário); } /*** Imprima uma matriz numérica a partir de 1 de fora para o interior, de acordo com o comprimento especificado e a direção da largura e a saída, e a posição inicial da matriz está no canto superior esquerdo. * * @param largura de largura da matriz * @param altura da matriz altura * @param no sentido horário, seja no sentido horário */ private estático void outputMatrix (int largura, int altura, booleano no sentido horário) {// primeiro julga o número de dígitos do maior número para determinar a saída da saída). // determinar o formato da saída (número máximo de dígitos + 1 espaço) String format = "%" + (numlength + 1) + "d"; // Defina a matriz bidimensional a ser emitida, observe que as dimensões são de alta a baixa // neste momento, matriz os valores de todos os elementos nele são 0 int [] [] matrix = new int [altura] [largura]; // Defina um ponteiro de posição e um contador, o ponteiro da posição é movido e o contador é responsável por incrementar. O número incrementado // é preenchido na matriz. Quando a largura * os números de altura são preenchidos, esta matriz é concluída. // Observe que o primeiro elemento do ponteiro de posição aqui corresponde à primeira dimensão y da matriz e o segundo elemento corresponde à segunda dimensão x. int [] ponteiro = {0, 0}; int contador = 1; // Defina a direção atual do movimento: 1, 2, 3 e 4 representam superior, direita, inferior e esquerda, respectivamente. // A direção inicial no sentido horário está certa e a direção inicial do sentido anti -horário é inferior. Int Direction = no sentido horário? 2: 3; // Iniciar o enchimento do loop, cada enchimento é de três etapas para (int i = 1, max = largura * altura; i <= max; i ++) {// 1. Preencha o conteúdo int y = ponteiro [0]; int x = ponteiro [1]; matriz [y] [x] = contador; // 2. O contador é incrementado pelo contador += 1; // 3. Mova para a próxima posição, porque este local é mais complicado, abra um método para implementar a direção = mover (matriz, largura, altura, ponteiro, direção, no sentido horário); } // Depois que a matriz é preenchida, você pode fazer a saída da maneira normal para (int y = 0; y <altura; y ++) {for (int x = 0; x <width; x ++) {System.out.printf (formato, matriz [y] [x]); } System.out.println (); // quebra da linha de saída após a conclusão de uma linha}} /** * Move * * @param Matrix Matrix na matriz, usada para determinar se a próxima posição na direção direta foi preenchida com números. Se sim, gire para * @param largura matriz matricial matriz matriz matriz matriz matriz matriz matriz matriz matriz Matrix Matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matr Matride hat me matr mat)) Matriz matricial matriz matricial matriz matriz matriz matriz matriz matriz matriz matricrix matriz matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matricrix matrix matrix matrix matrix matrix matrix matrix matrix matrame matrif hat me matr mat)) matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix mattrix matrix mattrix matrix mattrix matrix matrix matrix matrix matrix matrix matrame matr mat mat) matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix mattrix matrix mattrix matrix matrix matrix matrix matrix matrix matr mat mat File mtrine f) matC) Matriz matricial matriz matricial matriz matriz matriz matriz matriz matriz matriz matricrix matriz matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matricrix matrix matrix matrix matrix matrix matrix matrix matrix matrame matrif hat me matr mat)) matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix mattrix matrix mattrix matrix mattrix matrix matrix matrix matrix matrix matrix matrame matr mat mat) matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix matrix mattrix matrix mattrix matrix matrix matrix matrix matrix matrix matr mat mat File mtrine f) matC) Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix The value inside will change after calling this method, unless the method returns 0 * @param direction The current direction of the pointer is moving * @param clockwise Whether it is to turn clockwise * * @return The new direction after moving (may be the same ou diferente da direção original). Se você não puder continuar se movendo, retorne 0 */ private static int move (int [] [] matriz, int largura, int altura, Int [] ponteiro, int direção, booleano no sentido horário) {// Tente se mover para NewPointer Int [] newPointer = SofirEctly (ponteiro, direção); // Verifique se o NewPointer é legal. Se legal, atribua -o para apontar e manter a direção original. O método é concluído se (iSValid (newPointer, matriz, largura, altura)) {System.arraycopy (newPointer, 0, ponteiro, 0, 2); direção de retorno; } // Gire e mova -se novamente do ponteiro em uma nova direção de direção = Turn (direção, no sentido horário); newPointer = movimentado (ponteiro, direção); // Verifique se o NewPointer é legal (como antes) if (isValid (newPointer, matriz, largura, altura)) {System.arraycopy (newpointer, 0, ponteiro, 0, 2); direção de retorno; } // Você não pode avançar ou virar, para que não possa continuar a se mover. retornar 0; } // Determine se a posição especificada na matriz pode ser preenchida com o booleano estático privado IsValid (int [] newPointer, int [] [] matriz, int width, int alting) {// A posição não pode exceder a faixa da matriz se (newPointer [0]> = altura || retornar falso; } // O conteúdo da posição deve estar vazio se (matriz [newPointer [0]] [newPointer [1]]! = 0) {return false; } retornar true; } // dirige. De acordo com nossa definição de direção, no sentido horário é +1, o sentido anti -horário é -1 estático privado int Turn (Int Direção, Boolean no sentido horário) {int newDirection = no sentido horário? direção + 1: direção - 1; if (newDirection> 4) {newDirection = 1; } else if (newDirection <1) {newDirection = 4; } retornar novoDirection; } / *** Mova -se na direção especificada e retorne à nova posição** @param ponteiro Posição atual* @Param Direction** @return nova posição* / private static int [] movido comovente (int [] pointer, int direction) {int y = pointer [0]; int x = ponteiro [1]; switch (direção) {case 1: retorna new int [] {y - 1, x}; Caso 2: retornar novo int [] {y, x + 1}; Caso 3: retornar novo int [] {y + 1, x}; Caso 4: retornar novo int [] {y, x - 1}; } lança nova ilegalArgumentException ("direção incorreta:" + direção); }}Resultados em execução:
Para obter mais informações sobre os algoritmos Java, os leitores interessados neste site podem visualizar os tópicos: "Estrutura de dados Java e tutorial de algoritmo", "Resumo das dicas de nó da operação Java Dom", "Resumo de dicas de operação de Java e Operação de Java" e "Resumo de Java cache" Tips "TIPS"
Espero que este artigo seja útil para a programação Java de todos.