2013-12-16 137 views
1

我正在嘗試打印此矩陣陣列的轉置版本,但它是打印內存位置。有關如何打印實際數組的任何輸入?轉置陣列打印不正確

這是它打印:[I @ 4b71bbc9,[I @ 17dfafd1,[I @ 5e8fce95]

import java.util.*; 

class MatrixTranspose 
{ 
    public static void main (String [] args) 
    { 
     int [] [] m = { 
        {3, 6, 9}, 
        {4, 1, 5}, 
        {5, 8, 7},    
       }; 

     System.out.println (Arrays.toString (transpose(m)));  
    } 

    public static int [] [] transpose (int [] [] x) 
    { 
     int start = 1; 

     for (int r = 0; r < x.length; r++) 
     { 
      for (int c = start; c < x[0].length; c++) 
      { 
       int temp = x[r][c]; 
       x [r][c] = x[c][r]; 
       x[c][r] = temp; 
      } 

      start++; 
     } 

     return x; 
    } 
} 

回答

5

transpose(int[][] x)返回一個2維陣列。

使用Arrays.deepToString(Object[] a)代替:

如果元素e是一個基本類型的陣列,它通過調用的 Arrays.toString(e)適當重載轉換爲 字符串作爲。如果元素e是引用類型的數組, 將通過遞歸調用此方法將其轉換爲字符串。

System.out.println(Arrays.deepToString(transpose(m))); 
1

使用Arrays#deepToString代替。

在Java中,每個對象都有toString()方法,默認顯示類名稱表示,然後添加@和哈希碼。

爲了更好地理解你做的輸出,看到的Arrays#toString實現:

3860  public static String toString(int[] a) { { 
3861  if (a == null) 
3862   return "null"; 
3863  int iMax = a.length - 1; 
3864  if (iMax == -1) 
3865   return "[]"; 
3866 
3867  StringBuilder b = new StringBuilder(); 
3868  b.append('['); 
3869  for (int i = 0; ; i++) { 
3870   b.append(a[i]); 
3871   if (i == iMax) 
3872    return b.append(']').toString(); 
3873   b.append(", "); 
3874  } 
3875 } 

toString施加陣列上,導致你得到了「怪異」的輸出。