以sprial顺序打印2-d数组 - 进入无限循环

时间:2016-06-16 02:27:40

标签: java arrays

我正在尝试以sprial顺序实现print 2 d数组。我不知道为什么,但我的代码重复进入无限循环打印1,2,3,4。

StringsubString.java

package com.String;

public class StringSubString {

    public static void main(String arg[]) {
        int[][] values = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
        printInSprialOrder(values, 4, 4);
    }

    private static void printInSprialOrder(int A[][], int m, int n) {
        int t = 0, b = m - 1, l = 0, r = n - 1;
        while (t <= b && l <= r) {
            for (int i = l; i <= r; i++) {
                System.out.println(A[t][i]);
                t++;
            }
            for (int i = t; i <= b; i++) {
                System.out.println(A[i][r]);
                r--;
            }

            for (int i = r; i >= l; i++) {
                System.out.println(A[b][i]);
                b--;
            }
            for (int i = b; i >= t; i--) {
                System.out.println(A[i][l]);

            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您的代码行为与此处提到的不同。 试试:

 while(t<b && l<r){

        for(int i=l; i<= r ; i++){
            System.out.println(A[t][i]);
        }
        t++;

        for(int i=t;i<=b;i++){
            System.out.println(A[i][r]);
        }
        r--;

        for(int i=r ; i>=l ; i--){
            System.out.println(A[b][i]);
        }
        b--;

        for(int i=b;i>=t;i--){
            System.out.println(A[i][l]);
        }
        l++;

}

答案 1 :(得分:2)

在第一个for循环之后,你有t=4,然后在第二个for循环中,你什么都不打印。然后,在第三个for循环中,你的索引会增加,因此,它将尝试打印超出数组范围的A[4][2]