This is my program to print natural numbers from 1 to N^2 in a clockwise spiral. I’m getting the following error
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index -2147483648 out of bounds for length 3 at Spiral.main(Spiral.java:13)
This is my program
class Spiral{ public static void main(String[] args) { System.out.println("Enter value of N"); Scanner sc=new Scanner(System.in); int N=sc.nextInt(); int arr[][]=new int[N][N]; int r1=0, c1=0, r2=N-1, c2=N-1, flag=1; int i=0,j=0; while(flag<=N*N) { for(j=c1;j<=c2;j++) arr[r1][j]=flag++; for( i=r1+1;i<=r2;i++) arr[i][c2]=flag++; //this is the line of error for(j=c2-1;j>=c1;j--) arr[r2][j]=flag++; for(i=r2-1; i>r1+1;i--) arr[i][c1]=flag++; r1++; r2--; c1++; c2--; } System.out.println("The Circular Matrix is:"); for( i=0;i<N;i++) { for( j=0;j<N;j++) { System.out.print(arr[i][j]+ "t"); } System.out.println(); } } }
The code works fine for N=2 but starts giving this error for N=3,4 etc. If N=3, the greatest value of arr[i][c2] will be arr[2][2] which falls in the range of a 3×3 matrix. Could someone explain why I’m getting this error then?
Advertisement
Answer
Increment/decrement r1
, c2
, r2
, and c1
appropriately after their corresponding for loops rather than at the end of the while loop:
import java.util.Scanner; class Spiral { public static void main(String[] args) { System.out.println("Enter value of N"); Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[][] arr = new int[N][N]; int r1 = 0, c1 = 0, r2 = N - 1, c2 = N - 1, flag = 1; int i = 0, j = 0; while (flag <= N * N) { for (j = c1; j <= c2; j++) arr[r1][j] = flag++; r1++; for (i = r1; i <= r2; i++) arr[i][c2] = flag++; c2--; for (j = c2; j >= c1; j--) arr[r2][j] = flag++; r2--; for (i = r2; i >= r1; i--) arr[i][c1] = flag++; c1++; } System.out.println("The Circular Matrix is:"); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { System.out.print(arr[i][j] + "t"); } System.out.println(); } } }
Example Usage 1:
Enter value of N 4 The Circular Matrix is: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
Example Usage 2:
Enter value of N 7 The Circular Matrix is: 1 2 3 4 5 6 7 24 25 26 27 28 29 8 23 40 41 42 43 30 9 22 39 48 49 44 31 10 21 38 47 46 45 32 11 20 37 36 35 34 33 12 19 18 17 16 15 14 13