2016-06-16 2 views
0

印刷2次元配列をスピリットの順序で実装しようとしています。私は理由を知らないが、私のコードはループプリント1,2,3,4を繰り返し無限に入力している。2次元配列をスピリット順に出力する - 無限ループに入る

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

このコードでは、 "スレッド"のメイン "java.lang.ArrayIndexOutOfBoundsException:"例外が発生していますので、最後に一度確認してください。デバッグできるかもしれません。それは非常に一般的な問題ですが、あなたはそれをGoogleに託すことができ、多くのアプローチと解決策があります。 – 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

ループの最初の後、あなたはt=4を持って、その後、ループのための第二に、あなたは何も印刷されません。そして、3番目のforループでは、インデックスが増加するので、配列の範囲外にあるA[4][2]を印刷しようとします。

関連する問題