Java Program to Print Spiral Pattern of Numbers - GeeksforGeeks

09 Mar, 2021

Given a number n as the size of the matrix, the task is to print a spiral pattern of size n.
Examples:
Input : n = 4
Output: 1   2  3 4 
    12 13 14 5 
    11 16 15 6 
    10  9  8 7
Preview of the Spiral Pattern:


Java
 

 
 










public class GFG { 
  
    public static void printSpiral(int size) 
    { 
  
        // Create row and col 
        // to traverse rows and columns 
        int row = 0, col = 0; 
  
        int boundary = size - 1; 
        int sizeLeft = size - 1; 
        int flag = 1; 
  
        // Variable to determine the movement 
        // r = right, l = left, d = down, u = upper 
        char move = 'r'; 
  
        // Array for matrix 
        int matrix[][] = new int[size][size]; 
  
        for (int i = 1; i < size * size + 1; i++) { 
  
            // Assign the value 
            matrix[row][col] = i; 
  
            // switch-case to determine the next index 
            switch (move) { 
  
            // If right, go right 
            case 'r': 
                col += 1; 
                break; 
  
            // if left, go left 
            case 'l': 
                col -= 1; 
                break; 
  
            // if up, go up 
            case 'u': 
                row -= 1; 
                break; 
  
            // if down, go down 
            case 'd': 
                row += 1; 
                break; 
            } 
  
            // Check if the matrix 
            // has reached array boundary 
            if (i == boundary) { 
  
                // Add the left size for the next boundary 
                boundary += sizeLeft; 
  
                // If 2 rotations has been made, 
                // decrease the size left by 1 
                if (flag != 2) { 
  
                    flag = 2; 
                } 
                else { 
  
                    flag = 1; 
                    sizeLeft -= 1; 
                } 
  
                // switch-case to rotate the movement 
                switch (move) { 
  
                // if right, rotate to down 
                case 'r': 
                    move = 'd'; 
                    break; 
  
                // if down, rotate to left 
                case 'd': 
                    move = 'l'; 
                    break; 
  
                // if left, rotate to up 
                case 'l': 
                    move = 'u'; 
                    break; 
  
                // if up, rotate to right 
                case 'u': 
                    move = 'r'; 
                    break; 
                } 
            } 
        } 
  
        // Print the matrix 
        for (row = 0; row < size; row++) { 
            for (col = 0; col < size; col++) { 
  
                int n = matrix[row][col]; 
                System.out.print((n < 10) ? (n + " ") 
                                          : (n + " ")); 
            } 
  
            System.out.println(); 
        } 
    } 
  
    // Driver Code 
    public static void main(String[] args) 
    { 
  
        // Get the size of size 
        int size = 5; 
  
        // Print the Spiral Pattern 
        printSpiral(size); 
    } 
}






1 2 3 4 5 
16 17 18 19 6 
15 24 25 20 7 
14 23 22 21 8 
13 12 11 10 9 


Picked


Java


Java Programs

Writing code in comment? 
                                    Please use ide.geeksforgeeks.org, 
                                    generate link and share the link here.
                                
Functional Interfaces in Java
Stream In Java
Constructors in Java
Different ways of Reading a text file in Java
Exceptions in Java
Convert a String to Character array in Java
Java Programming Examples
Convert Double to Integer in Java
Implementing a Linked List in Java using Class
How to Iterate HashMap in Java?