打印多维数组的方法

时间:2016-08-09 21:19:54

标签: java arrays

我需要创建一个采用任何类型的多维数组的方法,并以人类可读的形式将其作为String返回。

例如:

input 1:  [1, 2, 3]

output 1: { 1, 2, 3 }


input 2:  [[1, 2, 3], [], [4, 5, 6]]

output 2: { 
             { 1, 2, 3 },
             {   },
             { 4, 5, 6 }
          }

因此,该方法的签名类似于

String printArray(Object array)
{
   ...
}

到目前为止,我想出了如何以递归方式构建它。我想知道是否有可能避免递归。显然,这是一个研究问题,并且不会在生产中实施。

由于

编辑:

行。我想分享递归实现更容易:

private String writeArray(Object array, String indent, String result)
{
    boolean isObjectArray = array.getClass().isArray();

    if (isObjectArray)
    {
        int length = Array.getLength(array);
        boolean isComponentArray = array.getClass().getComponentType().isArray();

        result += indent;
        result += (isComponentArray) ? "{\n" : "{ ";

        int i = 0;
        do
        {
            if (length != 0)
            {
                Object component = Array.get(array, i);
                result = writeArray(component, indent + "\t", result);
            }

            if (i < length - 1)
                result += (isComponentArray) ? ",\n" : ", ";
            else
                result += (isComponentArray) ? "\n" + indent + "}" : " }";

            i++;
        }
        while (i < length);
    }
    else
    {
        result += array.toString();
    }

    return result;
}

1 个答案:

答案 0 :(得分:0)

如果你想使用迭代而不是递归,你只需要意识到arrayOfArraysarrayOfArrays.length个数组。每个子数组都有array.length个元素。

这是int数组的示例。

public class WhatChaMaCallIt {

    public static void main(String[] args) {
        int[]   arr1 = {1, 2, 3};
        int[][] arr2 = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {}, {10, 11} };

        System.out.println(print(arr1));
        System.out.println(print(arr2));
    }

    private static String print(int[] arr) {
        if (arr.length == 0) {
            return "{ }";
        }

        StringBuilder sb = new StringBuilder();

        sb.append("{ ")
            .append(arr[0]);
        for (int k=1; k < arr.length; k++) {
            sb.append(", ")
                .append(arr[k]);
        }
        sb.append(" }");
        return sb.toString();
    }

    private static String print(int[][] arrOfArrs) {
        if (arrOfArrs.length == 0) {
            return "{ }";
        }

        StringBuilder sb = new StringBuilder();

        sb.append("{\n");
        sb.append("    ")
            .append(print(arrOfArrs[0]));
        for (int k=1; k < arrOfArrs.length; k++) {
            sb.append(",\n")
                .append("    ")
                .append(print(arrOfArrs[k]));
        }
        sb.append("\n}");
        return sb.toString();
    }
}

输出

{ 1, 2, 3 }
{
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 },
    { },
    { 10, 11 }
}