我正在尝试以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]);
}
}
}
}
答案 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]
。