В этой статье описывается реализация Java с выводом функции цифровой матрицы по часовой стрелке или против часовой стрелки. Поделитесь этим для вашей ссылки, следующим образом:
Тема: Распечатайте числовую матрицу, начиная с 1 из внешней части в верхний левый угол в соответствии с указанной длиной, шириной и направлением вывода. Следующий рисунок
Код и комментарии следующие:
Общедоступный номер класса matrix {public static void main (string [] args) {int width = 25; int height = 12; логический по часовой стрелке = false; System.out.println ("wulin.com Результаты теста:"); outputmatrix (ширина, высота, по часовой стрелке); } /*** Распечатайте численную матрицу, начиная с 1 из внешней части, в изнутри в соответствии с указанной длиной, шириной и направлением вывода, и исходное положение матрицы находится в верхнем левом углу. * * @param Ширина ширины ширины * @param Высота высоты высоты * @param по часовой стрелке, будь то по часовой стрелке */ private void output matrix (int width, int height, boolean по часовой стрелке) {// Первый суди по количеству цифров наибольшего числа, чтобы определить, как выход выровнен int numlenew = (int) math.log10 (width * height) + 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; // Определите формат выходного выходного сигнала (максимальное количество цифр + 1 пространство) Строка Format = "%" + (numlength + 1) + "d"; // Определите двумерный массив, который будет выходить, обратите внимание, что размеры от высокого до низкого // В настоящее время матрица значения всех элементов в нем составляют 0 int [] [] matrix = new int [hight] [width]; // Определите указатель позиции и счетчик, указатель позиции перемещается, и счетчик отвечает за увеличение. Увеличенное число // заполняется в матрицу. Когда числа высоты ширины * заполнены, эта матрица завершена. // Обратите внимание, что первый элемент указателя положения здесь соответствует первому измерению y матрицы, а второй элемент соответствует второму измерению x. int [] pointer = {0, 0}; int счетчик = 1; // Определите текущее направление движения: 1, 2, 3 и 4 представляют верхнюю, правую, нижнюю и левую соответственно. // Начало начального направления по часовой стрелке является правильным, а начальное направление против часовой стрелки - нижняя. int direction = по часовой стрелке? 2: 3; // заполнение цикла запуска, каждое заполнение составляет три шага для (int i = 1, max = width * height; i <= max; i ++) {// 1. Заполните содержание int y = pointer [0]; int x = pointer [1]; Матрица [y] [x] = счетчик; // 2. Счетчик увеличивается счетчиком += 1; // 3. Перейти к следующей позиции, потому что это место более сложное, откройте метод реализации направления = перемещение (матрица, ширина, высота, указатель, направление, по часовой стрелке); } // После заполнения матрицы вы можете нормально зацикливаться на выводе для (int y = 0; y <height; y ++) {for (int x = 0; x <width; x ++) {System.out.printf (формат, матрица [y] [x]); } System.out.println (); // Выходная строка после завершения одной строки}} /** * Move * * @param Matrix Matrix в матрице, используемой для определения того, была ли следующая позиция в направлении прямого направления заполнена чисел. 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 Матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матричная матрица Внутри изменится после того, что на вызове. или отличается от исходного направления). Если вы не можете продолжать двигаться, вернуть 0 */ private static int move (int [] [] Матрица, ширина int, int height, int [] указатель, направление int, логическое часовое часовое часовое стрельбу) {// попытаться перейти к Newpointer int [] newpointer = перемещается (указатель, направление); // Проверьте, является ли NewPointer законным. Если законно, назначьте его указателю и сохраните исходное направление. Метод завершается, если (isValid (NewPointer, Matrix, Width, Height)) {System.ArrayCopy (NewPointer, 0, Pointer, 0, 2); направление возврата; } // Поверните и снова перемещайтесь из указателя в новом направлении = поворот (направление, по часовой стрелке); newPointer = перемещается (указатель, направление); // Проверьте, является ли NewPointer законным (как и прежде) if (isvalid (newpointer, matrix, width, height)) {system.arraycopy (newpointer, 0, pointer, 0, 2); направление возврата; } // Вы не можете двигаться вперед или повернуть, поэтому вы не можете продолжать двигаться. возврат 0; } // Определить, может ли указанная позиция в матрице быть заполнена частным статическим логическим ISValid (int [] newPointer, int [] [] Матрица, int width, int height) {// Положение не может превышать диапазон матрицы if (newpointer [0]> = высота || newpointer [0] <0 || newpointer [1] = width || wwidth || вернуть ложь; } // Содержание позиции должно быть пустым, если (matrix [newpointer [0]] [newpointer [1]]! = 0) {return false; } вернуть true; } // Руле. Согласно нашему определению направления, по часовой стрелке -+1, против часовой стрелки -1 частный статический int urdult (int direction, логическое движение по часовой стрелке) {int newdirection = по часовой стрелке? Направление + 1: Направление - 1; if (newdirection> 4) {newdirection = 1; } else if (newDirection <1) {newDirection = 4; } вернуть NewDirection; } / *** Переместите в указанном направлении и вернитесь в новую позицию** @param pointer current position* @param направление*** @return новая позиция* / private int [] перемещается (int [] pointer, int direction) {int y = pointer [0]; int x = pointer [1]; Switch (Direction) {case 1: вернуть новый int [] {y - 1, x}; Случай 2: вернуть новый int [] {y, x + 1}; Случай 3: вернуть новый int [] {y + 1, x}; Случай 4: вернуть новый int [] {y, x - 1}; } бросить новое allogalargumentException («Неправильное направление:» + направление); }}Результаты работы:
Для получения дополнительной информации об алгоритмах Java, читатели, которые заинтересованы в этом сайте, могут просмотреть темы: «Учебное пособие по структуре данных Java и алгоритм», «Сводка операции Java Dom Node», «Сводка Java File и каталог
Я надеюсь, что эта статья будет полезна для всех Java Programming.