When using java programming to display a spiral square, a if conditional statement is used to change the direction of the square array. But the order of the logic or condition in the if conditional statement is different.
This program is written in Eclipse 4.12 of the windows operating system. Java version "1.8.0_221" Java(TM) SE Runtime Environment(build 1.8.0_221-bll) Java HotSpot(TM) 64-Bit Server VM (build 25.221-bll,mixed mode)
I googled but found nothing helpful ^^
public class SpiralMatrix {
public static void main(String[] args) {
int matrix[][] = new int[4][4];
/*Spiral direction is clockwise, so x, y coordinate
corresponding increase 1, unchanged or minus 1.*/
int xd[] = {0,1,0,-1};
int yd[] = {1,0,-1,0};
/*d=0,1,2,3 represents the right, down, left, and upper
directions, respectively.*/
int d = 0;
/*Next_x,next_y represents the subscript of the next array
element, respectively*/
int x=0,y=0,next_x,next_y;
for(int i=0;i<16;i++) {
matrix[x][y] = i+1;
next_x = x+xd[d];
next_y = y+yd[d];
/*When the subscript of the next array element does
not exist or exceeds the boundary and the array
element has been assigned a value*/
if(next_x<0||next_y<0||next_y==4||next_x==4||matrix[next_x][next_y]!=0) {
/*change direction*/
d = (d+1)%4;
next_x = x+xd[d];
next_y = y+yd[d];
}
x = next_x;
y = next_y;
}
/*output spiral matrix*/
for(int a=0;a<4;a++) {
for(int b=0;b<4;b++) {
System.out.print(matrix[a][b]+"\t");
}
System.out.println();
}
}
The above code outputs a correct result:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
But if you change the order of the conditions in parentheses in the if statement, for example:
if (matrix[next _ x][next _ y]! = 0 | | next _ x <0 | | next _ y <0 | | next _ y = = 4 | | next _ x = = 4)
Then runn the program,the result shows that:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at code.SpiralMatrix.main(SpiralMatrix.java:19)
And then I've been confused.
Aucun commentaire:
Enregistrer un commentaire