转置数组无法正确打印

时间:2013-12-16 21:20:35

标签: java arrays matrix transpose

我正在尝试打印此矩阵阵列的转置版本,但它正在打印内存位置。关于如何打印实际数组的任何输入?

这是它的印刷品:[[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;
    }
}

2 个答案:

答案 0 :(得分:5)

transpose(int[][] x)返回一个二维数组。

改为使用Arrays.deepToString(Object[] a)

  

如果元素e是基本类型的数组,则将其转换为a   字符串,通过调用适当的重载   Arrays.toString(e)。如果元素e是引用类型的数组,   通过递归调用此方法将其转换为字符串。

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

答案 1 :(得分: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应用于数组,从而产生“奇怪”的输出。