2016-06-16 31 views
0

我试图按sprial顺序实现打印2 d数组。我不知道为什么,但我的代码重复进入无限循环打印1,2,3,4。在sprial顺序输入无限循环中打印二维数组

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

https://www.youtube.com/watch?v=siKFOI8PNKM – Leo

+0

如果您的代码重复打印1,2,3,4,则您已发布与代码不同的内容。当我运行它时,它的行为完全不同。 – ajb

+0

有了这段代码,我得到了“线程中的异常”main“java.lang.ArrayIndexOutOfBoundsException:”4,所以请在您的最后检查一次,也许您可​​以调试它,然后您会自行找到问题。虽然它是一个非常普遍的问题,但你可以在谷歌上搜索并且可以有很多方法和解决方案。 – pbajpai21

回答

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++; 

} 
+0

这不是我期望的输出..我按照这个教程的https:// WWW。 youtube.com/watch?v=siKFOI8PNKM所以我想要的输出是1 2 3 4 8 12 16 .. –

2

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