mardi 10 septembre 2019

Why are the order of several logic or conditions in the if conditional statement different, and the result is different?

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