2013-01-12 19 views
0

我已經在java中編寫了一個代碼來交換3 * 4矩陣的列。使用java交換3 * 4矩陣中的列

String[][] a = { { a,t,t,a}, 
       { c,k,a,t}, 
       { d,a,w,n } 
       }; 

,我想作爲輸出的是: A,T,T,A, T,A,K,C, N,W,A,d。

所以我的循環如下:

for(i=0;i<=2;i++) { 
    for(j=0;j<=5;j++) { 
     if(j<=2) { 
      temp=a[i][j+1]; 
      a[i][j+1]=a[i][j]; 
      a[i][j]=temp; 
     } 
     if(j>3) { 
      temp=a[i][j-3]; 
      a[i][j-3]=a[i][j-4]; 
      a[i][j-4]=temp; 
     } else { 
      temp=a[i][j-1]; 
      a[i][j-1]=a[i][j-2]; 
      a[i][j-2]=temp; 
     } 
    } 
} 

錯誤是:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 
at Execute.swapColums(DtTwo.java:69) 
at DtTwo.main(DtTwo.java:11) 

請幫助..

+0

是否要交換列或反向某些行?你想要的輸出很奇怪。 – Juvanis

+0

如果你想了解你的代碼在做什麼,爲什麼它沒有按照你的想法去做,你應該先試試你的調試器。 –

回答

1

例子:

public class Test 
{ 
    public static void main(String args[]) 
    { 
     String[][] array2d = { 
         { "a","t","t","a"}, 
         { "c","k","a","t"}, 
         { "d","a","w","n" } 
        }; 

     for (int i = 0; i < array2d.length; i++) 
     { 
      swapCols(array2d[i]); 
     } 

     print(array2d); 
    } 

    private static void swapCols(String s[]) 
    { 
     for (int i = 0; i < s.length/2; i++) 
     { 

      String temp = s[s.length - 1 - i]; 
      s[s.length - 1 - i] = s[i]; 
      s[i] = temp; 
     } 
    } 

    private static void print(String[][] array2d) 
    { 
     System.out.println(Arrays.deepToString(array2d)); 
    } 
} 

輸出:

[[a, t, t, a], [t, a, k, c], [n, w, a, d]] 
+0

感謝您的幫助 –

+0

沒有probs :-) http://stackoverflow.com/faq#howtoask –

0
public static void swap(int[][] arr, int line, int pos1, int pos2) { 
    int temp = arr[line][pos1]; 
    arr[line][pos1] = arr[line][pos2]; 
    arr[line][pos2] = temp; 
} 

public static void main(String args[]) 
{ 
    String[][] arr = { 
        { "a","t","t","a"}, 
        { "c","k","a","t"}, 
        { "d","a","w","n" } 
       }; 

    for (i=0; i<3; i++) { 
     swap(arr, i, 0, 3); 
     swap(arr, i, 1, 2); 
    } 
} 
0

這可能是一個愚蠢的想法,但它可以簡化比現在更使其更有效地使用

這樣的想法是,轉換一行到列表 - >使它to - >反轉字符串 - >使用split方法再次生成數組。

String[][] a = {{"a", "t", "t", "a"}, 
      {"c", "k", "a", "t"}, 
      {"d", "a", "w", "n"} 
     }; 

     System.out.println(
      new StringBuffer(Arrays.asList(a[1]). 
      toString(). 
      replace("[", ""). 
      replace("]", ""). 
      replace(" ", "")). 
      reverse(). 
      toString(). 
      split(",")); 

結果= A [1] - > T,A,K,C

0

可以使用此代碼:

public void test() { 
    String[][] a = { 
      {"a", "t", "t", "a"}, 
      {"c", "k", "a", "t"}, 
      {"d", "a", "w", "n"} 
    }; 

    String tmp; 
    for (int i = 0; i < a.length; i++) { 
     for (int j = 0; j < a[i].length/2; j++) { 
      tmp = a[i][j]; 
      a[i][j] = a[i][a.length - j]; 
      a[i][a.length - j] = tmp; 
     } 
    } 

    for (int i = 0; i < a.length; i++) { 
     System.out.print("["); 
     for (int j = 0; j < a[i].length; j++) { 
      System.out.print(a[i][j] + ","); 
     } 
     System.out.println("]"); 
    } 
} 
0

你得到java.lang.ArrayIndexOutOfBoundsException: - 1 ,因爲您有4列,並且您在此處循環顯示更多列

for(j=0;j<=5;j++) 

試圖更改在

for(j=0;j<4;j++)